Для запуска сервера 1С Образования приходится использовать native библиотеку wininet.dll, т.к. втроенная уходит бесконечный цикл отправки и приема сообщений. Необходимо разобраться, чего не хватает и дописать.
Надо посмотреть какие тесты есть, потрейсить, какие функции из библиотеки используются, и попытаться выявить отличия от оригинальной wininet.dll (скорее всего коды возврата?)
Вот кусок трейса который постоянно повторяется. trace:wininet:HTTP_OpenConnection --> trace:wininet:HTTP_OpenConnection 1 <-- trace:wininet:HTTP_HttpSendRequestW full request -> "POST /1CEduWeb/servlet/AxisServlet HTTP/1.1\r\nAccept: text/xml\r\nHost: euclid\r\nCookie: JSESSIONID=97E3241C5CC74438A1E5EEB39C53CFB4\r\nSOAPAction: \"1\"\r\nContent-Type: text/xml\r\nContent-Length: 438\r\nUser-Agent: Borland SOAP 1.1\r\nConnection: Keep-Alive\r\n\r\n<?xml version=\"1.0\"?>\r\n<SOA"... trace:wininet:HTTP_GetResponseHeaders --> trace:wininet:NETCON_getNextLine trace:wininet:NETCON_getNextLine :16 HTTP/1.1 200 OK trace:wininet:HTTP_GetResponseHeaders version [L"HTTP/1.1"] status code [L"200"] status text [L"OK"] trace:wininet:HTTP_ProcessHeader --> L"Status": L"200" - 0x80000000 trace:wininet:HTTP_GetCustomHeaderIndex L"Status" trace:wininet:HTTP_GetCustomHeaderIndex Return: -1 trace:wininet:HTTP_InsertCustomHeader --> L"Status": L"200" trace:wininet:NETCON_getNextLine trace:wininet:NETCON_getNextLine :38 Content-Type: text/xml; charset=utf-8 trace:wininet:HTTP_GetResponseHeaders got line "Content-Type: text/xml; charset=utf-8", now interpreting trace:wininet:HTTP_InterpretHttpHeader field(L"Content-Type") Value(L"text/xml; charset=utf-8") trace:wininet:HTTP_ProcessHeader --> L"Content-Type": L"text/xml; charset=utf-8" - 0x20000000 trace:wininet:HTTP_InsertCustomHeader --> L"Content-Type": L"text/xml; charset=utf-8" trace:wininet:NETCON_getNextLine trace:wininet:NETCON_getNextLine :27 Transfer-Encoding: chunked trace:wininet:HTTP_GetResponseHeaders got line "Transfer-Encoding: chunked", now interpreting trace:wininet:HTTP_InterpretHttpHeader field(L"Transfer-Encoding") Value(L"chunked") trace:wininet:HTTP_ProcessHeader --> L"Transfer-Encoding": L"chunked" - 0x20000000 trace:wininet:HTTP_InsertCustomHeader --> L"Transfer-Encoding": L"chunked" trace:wininet:NETCON_getNextLine trace:wininet:NETCON_getNextLine :36 Date: Thu, 29 May 2008 12:21:54 GMT trace:wininet:HTTP_GetResponseHeaders got line "Date: Thu, 29 May 2008 12:21:54 GMT", now interpreting trace:wininet:HTTP_InterpretHttpHeader field(L"Date") Value(L"Thu, 29 May 2008 12:21:54 GMT") trace:wininet:HTTP_ProcessHeader --> L"Date": L"Thu, 29 May 2008 12:21:54 GMT" - 0x20000000 trace:wininet:HTTP_InsertCustomHeader --> L"Date": L"Thu, 29 May 2008 12:21:54 GMT" trace:wininet:NETCON_getNextLine trace:wininet:NETCON_getNextLine :26 Server: Apache Coyote/1.0 trace:wininet:HTTP_GetResponseHeaders got line "Server: Apache Coyote/1.0", now interpreting trace:wininet:HTTP_InterpretHttpHeader field(L"Server") Value(L"Apache Coyote/1.0") trace:wininet:HTTP_ProcessHeader --> L"Server": L"Apache Coyote/1.0" - 0x20000000 trace:wininet:HTTP_InsertCustomHeader --> L"Server": L"Apache Coyote/1.0" trace:wininet:NETCON_getNextLine trace:wininet:NETCON_getNextLine :1 trace:wininet:HTTP_GetResponseHeaders got line "", now interpreting trace:wininet:HTTP_GetResponseHeaders raw headers: L"HTTP/1.1 200 OK\r\nContent-Type: text/xml; charset=utf-8\r\nTransfer-Encoding: chunked\r\nDate: Thu, 29 May 2008 12:21:54 GMT\r\nServer: Apache Coyote/1.0\r\n\r\n" trace:wininet:HTTP_GetResponseHeaders <-- trace:wininet:HTTP_GetCustomHeaderIndex L"Set-Cookie" trace:wininet:HTTP_GetCustomHeaderIndex Return: -1 trace:wininet:HTTP_GetCustomHeaderIndex L"Content-Length" trace:wininet:HTTP_GetCustomHeaderIndex Return: -1 trace:wininet:HTTP_GetCustomHeaderIndex L"Transfer-Encoding" trace:wininet:HTTP_GetCustomHeaderIndex Return: 10 trace:wininet:HTTP_HttpQueryInfoW returning string : L"chunked" trace:wininet:HTTP_GetCustomHeaderIndex L"Status" trace:wininet:HTTP_GetCustomHeaderIndex Return: 8 trace:wininet:HTTP_HttpQueryInfoW returning number : 200 trace:wininet:HTTP_HttpSendRequestW <-- trace:wininet:WININET_Release object 0x154bc0 refcount = 1 trace:wininet:InternetErrorDlg 0x10020 0x3 12150 00000007 0x32fab0 trace:wininet:HttpSendRequestW 0x3, (null), 0, 0xdd0c28, 438) trace:wininet:WININET_AddRef 0x154bc0 -> refcount = 2 trace:wininet:WININET_GetObject handle 3 -> 0x154bc0 trace:wininet:HTTP_HttpSendRequestW --> 0x154bc0 trace:wininet:HTTP_HttpAddRequestHeadersW copying header: L"Content-Length: 438\r\n" trace:wininet:HTTP_HttpAddRequestHeadersW interpreting header L"Content-Length: 438" trace:wininet:HTTP_InterpretHttpHeader field(L"Content-Length") Value(L"438") trace:wininet:HTTP_ProcessHeader --> L"Content-Length": L"438" - 0x12000000 trace:wininet:HTTP_GetCustomHeaderIndex L"Content-Length" trace:wininet:HTTP_GetCustomHeaderIndex Return: 5 trace:wininet:HTTP_HttpAddRequestHeadersW copying header: L"User-Agent: Borland SOAP 1.1\r\n" trace:wininet:HTTP_HttpAddRequestHeadersW interpreting header L"User-Agent: Borland SOAP 1.1" trace:wininet:HTTP_InterpretHttpHeader field(L"User-Agent") Value(L"Borland SOAP 1.1") trace:wininet:HTTP_ProcessHeader --> L"User-Agent": L"Borland SOAP 1.1" - 0x12000000 trace:wininet:HTTP_GetCustomHeaderIndex L"User-Agent" trace:wininet:HTTP_GetCustomHeaderIndex Return: 6 trace:wininet:HTTP_FinishedReading trace:wininet:HTTP_HttpQueryInfoW returning data: L"HTTP/1.1" trace:wininet:HTTP_GetCustomHeaderIndex L"Host" trace:wininet:HTTP_GetCustomHeaderIndex Return: 1 trace:wininet:HTTP_HttpSendRequestW Going to url L"euclid" L"/1CEduWeb/servlet/AxisServlet" trace:wininet:HTTP_ProcessHeader --> L"Connection": L"Keep-Alive" - 0x82000000 trace:wininet:HTTP_GetCustomHeaderIndex L"Connection" trace:wininet:HTTP_GetCustomHeaderIndex Return: 7 trace:wininet:HTTP_InsertCustomHeader --> L"Connection": L"Keep-Alive" trace:wininet:HTTP_BuildHeaderRequestString Adding custom header L"Accept" (L"text/xml") trace:wininet:HTTP_BuildHeaderRequestString Adding custom header L"Host" (L"euclid") trace:wininet:HTTP_BuildHeaderRequestString Adding custom header L"Cookie" (L"JSESSIONID=97E3241C5CC74438A1E5EEB39C53CFB4") trace:wininet:HTTP_BuildHeaderRequestString Adding custom header L"SOAPAction" (L"\"1\"") trace:wininet:HTTP_BuildHeaderRequestString Adding custom header L"Content-Type" (L"text/xml") trace:wininet:HTTP_BuildHeaderRequestString Adding custom header L"Content-Length" (L"438") trace:wininet:HTTP_BuildHeaderRequestString Adding custom header L"User-Agent" (L"Borland SOAP 1.1") trace:wininet:HTTP_BuildHeaderRequestString Adding custom header L"Connection" (L"Keep-Alive") trace:wininet:HTTP_HttpSendRequestW Request header -> L"POST /1CEduWeb/servlet/AxisServlet HTTP/1.1\r\nAccept: text/xml\r\nHost: euclid\r\nCookie: JSESSIONID=97E3241C5CC74438A1E5EEB39C53CFB4\r\nSOAPAction: \"1\"\r\nContent-Type: text/xml\r\nContent-Length: 438\r\nUser-Agent: Borland SOAP 1.1\r\nConnection: Keep-Alive\r\n\r\n" trace:wininet:HTTP_OpenConnection --> trace:wininet:HTTP_OpenConnection 1 <--
*** Bug 680 has been marked as a duplicate of this bug. ***
В логе, получаемом с помощью WINEDEBUG=+wininet ww ServerManager.exe 2>&1 | egrep -v '(WININET_|HTTP_|NETCON_|COOKIE_)', повторяется такой кусок: trace:wininet:HttpSendRequestW 0x3, (null), 0, 0x639798, 433) trace:wininet:InternetSetCookieW (L"http://euclid/",L"JSESSIONID",L"F5A569EF0411110C02064CD6A6EE0701") trace:wininet:InternetCrackUrlW (L"http://euclid/" 0 0 0x32c694) trace:wininet:SetUrlComponentValueW (null) (0) trace:wininet:GetInternetSchemeW L"http" 4 trace:wininet:SetUrlComponentValueW L"http" (4) trace:wininet:SetUrlComponentValueW (null) (0) trace:wininet:SetUrlComponentValueW (null) (0) trace:wininet:SetUrlComponentValueW L"euclid" (6) trace:wininet:SetUrlComponentValueW L"/" (1) trace:wininet:InternetCrackUrlW L"http://euclid/": scheme((null)) host(L"euclid") path(L"/") extra((null)) trace:wininet:set_cookie setting cookie L"JSESSIONID"=L"F5A569EF0411110C02064CD6A6EE0701" for domain L"euclid" trace:wininet:InternetErrorDlg 0x30020 0x3 12150 00000007 0x32fbc8 Это повторяющийся вызов HttpSendRequestA и InternetErrorDlg. Все вызовы здесь вплоть до set_cookie включительно происходят внутри HttpSendRequestA (это можно увидеть с помощью +relay). С родной wininet.dll также вызываются HttpSendRequestA и InternetErrorDlg, но не бесконечное число раз (если сервер запускается с первого раза, то вообще 1 раз).
Лог sudo tcpdump -ni any port 8092 с wininet из Wine состоит из очень большого числа вот таких повторяющихся строчек: 18:54:31.225519 IP 192.168.0.54.48263 > 192.168.0.54.8092: S 1629256378:1629256378(0) win 32792 <mss 16396,nop,nop,sackOK,nop,wscale 6> 18:54:31.225679 IP 192.168.0.54.8092 > 192.168.0.54.48263: R 0:0(0) ack 1629256379 win 0 18:54:31.248909 IP 192.168.0.54.48265 > 192.168.0.54.8092: S 1637912845:1637912845(0) win 32792 <mss 16396,nop,nop,sackOK,nop,wscale 6> 18:54:31.248920 IP 192.168.0.54.8092 > 192.168.0.54.48265: R 0:0(0) ack 1637912846 win 0 При использовании родной wininet.dll: 18:58:40.807670 IP 192.168.0.54.54970 > 192.168.0.54.8092: S 1258596986:1258596986(0) win 32792 <mss 16396,nop,nop,sackOK,nop,wscale 6> 18:58:40.807742 IP 192.168.0.54.8092 > 192.168.0.54.54970: R 0:0(0) ack 1258596987 win 0 ........ много аналогичных строчек ........ 18:58:43.053279 IP 192.168.0.54.56017 > 192.168.0.54.8092: S 1289719622:1289719622(0) win 32792 <mss 16396,nop,nop,sackOK,nop,wscale 6> 18:58:43.053298 IP 192.168.0.54.8092 > 192.168.0.54.56017: R 0:0(0) ack 1289719623 win 0 18:58:44.059718 IP 192.168.0.54.56018 > 192.168.0.54.8092: S 1301085809:1301085809(0) win 32792 <mss 16396,nop,nop,sackOK,nop,wscale 6> 18:58:44.059734 IP 192.168.0.54.8092 > 192.168.0.54.56018: S 1310949479:1310949479(0) ack 1301085810 win 32792 <mss 16396,nop,nop,sackOK,nop,wscale 6> 18:58:44.059743 IP 192.168.0.54.56018 > 192.168.0.54.8092: . ack 1 win 513 18:58:44.060121 IP 192.168.0.54.56018 > 192.168.0.54.8092: F 1:1(0) ack 1 win 513 18:58:44.062669 IP 192.168.0.54.8092 > 192.168.0.54.56018: . ack 2 win 513 18:58:44.097085 IP 192.168.0.54.57410 > 192.168.0.54.8092: S 1301636514:1301636514(0) win 32792 <mss 16396,nop,nop,sackOK,nop,wscale 6> 18:58:44.097108 IP 192.168.0.54.8092 > 192.168.0.54.57410: S 1309156623:1309156623(0) ack 1301636515 win 32792 <mss 16396,nop,nop,sackOK,nop,wscale 6> 18:58:44.097122 IP 192.168.0.54.57410 > 192.168.0.54.8092: . ack 1 win 513 18:58:44.097546 IP 192.168.0.54.57410 > 192.168.0.54.8092: P 1:652(651) ack 1 win 513 18:58:44.097557 IP 192.168.0.54.8092 > 192.168.0.54.57410: . ack 652 win 533 18:58:46.346808 IP 192.168.0.54.8092 > 192.168.0.54.56018: F 1:1(0) ack 2 win 513 18:58:46.346835 IP 192.168.0.54.56018 > 192.168.0.54.8092: . ack 2 win 513 18:58:47.447889 IP 192.168.0.54.8092 > 192.168.0.54.57410: P 1:215(214) ack 652 win 533 18:58:47.447930 IP 192.168.0.54.57410 > 192.168.0.54.8092: . ack 215 win 530 18:58:47.448924 IP 192.168.0.54.8092 > 192.168.0.54.57410: P 215:708(493) ack 652 win 533 18:58:47.448937 IP 192.168.0.54.57410 > 192.168.0.54.8092: . ack 708 win 546 18:58:47.449568 IP 192.168.0.54.8092 > 192.168.0.54.57410: F 708:708(0) ack 652 win 533 18:58:47.449669 IP 192.168.0.54.57410 > 192.168.0.54.8092: F 652:652(0) ack 709 win 546 18:58:47.449677 IP 192.168.0.54.8092 > 192.168.0.54.57410: . ack 653 win 533 Когда у сервера не получается запуститься с родной wininet.dll, логи выглядят также, как и со встроенной. Иногда с родной wininet.dll в начале лога нет повторяющихся строчек с S- и R-пакетами.
В случае со встроенной wininet.dll (если подождать и если повезёт) соединение таки может устанавливаться, но через некоторое время его разрывает клиент: ................. 18:12:41.230912 IP euclid.office.etersoft.ru.37887 > euclid.office.etersoft.ru.8092: S 2834412164:2834412164(0) win 32792 <mss 16396,nop,nop,sackOK,nop,wscale 6> 18:12:41.230924 IP euclid.office.etersoft.ru.8092 > euclid.office.etersoft.ru.37887: S 2830011604:2830011604(0) ack 2834412165 win 32792 <mss 16396,nop,nop,sackOK,nop,wscale 6> 18:12:41.230934 IP euclid.office.etersoft.ru.37887 > euclid.office.etersoft.ru.8092: . ack 1 win 513 18:12:41.230964 IP euclid.office.etersoft.ru.37887 > euclid.office.etersoft.ru.8092: P 1:629(628) ack 1 win 513 18:12:41.230970 IP euclid.office.etersoft.ru.8092 > euclid.office.etersoft.ru.37887: . ack 629 win 532 18:12:41.233040 IP euclid.office.etersoft.ru.8092 > euclid.office.etersoft.ru.37886: P 224:229(5) ack 630 win 532 18:12:41.233054 IP euclid.office.etersoft.ru.37886 > euclid.office.etersoft.ru.8092: R 2843512033:2843512033(0) win 0 18:12:41.233706 IP euclid.office.etersoft.ru.8092 > euclid.office.etersoft.ru.37887: P 1:224(223) ack 629 win 532 18:12:41.233725 IP euclid.office.etersoft.ru.37887 > euclid.office.etersoft.ru.8092: . ack 224 win 530 18:12:41.234012 IP euclid.office.etersoft.ru.37887 > euclid.office.etersoft.ru.8092: F 629:629(0) ack 224 win 530 18:12:41.234058 IP euclid.office.etersoft.ru.37888 > euclid.office.etersoft.ru.8092: S 2839423448:2839423448(0) win 32792 <mss 16396,nop,nop,sackOK,nop,wscale 6> 18:12:41.234070 IP euclid.office.etersoft.ru.8092 > euclid.office.etersoft.ru.37888: S 2839378418:2839378418(0) ack 2839423449 win 32792 <mss 16396,nop,nop,sackOK,nop,wscale 6> 18:12:41.234080 IP euclid.office.etersoft.ru.37888 > euclid.office.etersoft.ru.8092: . ack 1 win 513 18:12:41.234107 IP euclid.office.etersoft.ru.37888 > euclid.office.etersoft.ru.8092: P 1:629(628) ack 1 win 513 18:12:41.234113 IP euclid.office.etersoft.ru.8092 > euclid.office.etersoft.ru.37888: . ack 629 win 532 18:12:41.234406 IP euclid.office.etersoft.ru.8092 > euclid.office.etersoft.ru.37887: P 224:229(5) ack 630 win 532 18:12:41.234421 IP euclid.office.etersoft.ru.37887 > euclid.office.etersoft.ru.8092: R 2834412794:2834412794(0) win 0 ................. Видимо, причина в том, что сервер неправильно отвечает на пакет FIN
Порт, который слушает tomcat после его запуска ServerManager`ом, настраивается в c:/Program Files/1C Education/1CE3/common/tomcat/conf/server.xml в строке <Server port="8200" ...>. tomcat можно запустить под wine без ServerManager с помощью команды ww "C:\\Program Files\\1C Education\\1CE3\\common\\jre\\bin\\java.exe" -jar -Duser.dir="C:\\Program Files\\1C Education\\1CE3\\common\\tomcat" "C:\\Program Files\\1C Education\\1CE3\\common\\tomcat\\bin\\bootstrap.jar" start
Firebird можно запустить на определённом порту (например, 6666) с помощью команды ww "C:\\Program Files\\Common Files\\1C Education Shared\\fb\\bin\\ibserver.exe" -a -p 6666 При этом в трее появляется его значок. Остановить его можно, если щёлкнуть на этом значке правой кнопкой и выбрать Shutdown.
Чтобы всё работало, когда Firebird запущен на другом порту, надо заменить номер порта в файле c:/Program Files/1C Education/1CE3/common/tomcat/webapps/1CEduWeb/WEB-INF/ls.xml
Написал тестовую программу-клиент, подключающуюся к запущенному вручную tomcat`у из 1С:Образование. В программе есть цикл, в котором выполняется HttpSendRequestA. Если заставить цикл выполняться порядка 100 раз, то при использовании встроееной в Wine wininet tomcat выводит ошибки "java.net.SocketException: Connection reset by peer: socket write error". С wininet из Windows никаких ошибок нет. С помощью strace -f -e trace=network ww wininet_connect.exe (wininet_connect.exe - та самая тестовая программа-клиент) можно посмотреть, как происходит обращение к tomcat. wininet из Wine: [pid 10021] socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 18 [pid 10021] connect(18, {sa_family=AF_INET, sin_port=htons(8095), sin_addr=inet_addr("192.168.0.54")}, 16) = 0 [pid 10021] send(18, "POST /1CEduWeb/servlet/AxisServle"..., 598, 0) = 598 [pid 10021] recv(18, "HTTP/1.1 200 OK\r\nSet-Cookie: JSES"..., 1460, MSG_PEEK) = 223 [pid 10021] recv(18, "H"..., 1, 0) = 1 .............. [pid 10021] recv(18, "\n"..., 1, 0) = 1 wininet из Windows: [pid 11988] bind(21, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = 0 [pid 11988] getsockname(21, {sa_family=AF_INET, sin_port=htons(53665), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0 [pid 11988] connect(21, {sa_family=AF_INET, sin_port=htons(8095), sin_addr=inet_addr("192.168.0.54")}, 16) = -1 EINPROGRESS (Operation now in progress) [pid 11988] setsockopt(21, SOL_TCP, TCP_NODELAY, [1], 4) = 0 [pid 11988] setsockopt(21, SOL_SOCKET, SO_RCVTIMEO, "\20\16\0\0\0\0\0\0"..., 8) = 0 [pid 11988] setsockopt(21, SOL_SOCKET, SO_LINGER, {onoff=1, linger=0}, 8) = 0 [pid 11988] sendmsg(21, {msg_name(0)=NULL, msg_iov(1)=[{"POST /1CEduWeb/servlet/AxisServle"..., 621}], msg_controllen=0, msg_flags=0}, 0) = 621 [pid 11988] getsockopt(21, SOL_SOCKET, SO_SNDTIMEO, "\0\0\0\0\0\0\0\0"..., [8]) = 0 [pid 11988] recvmsg(21, 0x66f790, 0) = -1 EAGAIN (Resource temporarily unavailable) [pid 11988] getsockopt(21, SOL_SOCKET, SO_RCVTIMEO, "\20\16\0\0\0\0\0\0"..., [8]) = 0 [pid 11988] recvmsg(21, {msg_name(0)=NULL, msg_iov(1)=[{"HTTP/1.1 200 OK\r\nSet-Cookie: JSES"..., 1024}], msg_controllen=0, msg_flags=0}, 0) = 707 [pid 11988] recvmsg(21, {msg_name(0)=NULL, msg_iov(1)=[{"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 531}], msg_controllen=0, m sg_flags=0}, 0) = 0 [pid 11988] setsockopt(21, SOL_SOCKET, SO_LINGER, {onoff=0, linger=0}, 8) = 0
Написал тест для InternetErrorDlg
ServerManager почему-то вызывает функции InternetConnectA и HttpOpenRequestA с ненулевым последним параметром. Он нужен вроде бы только при использовании callback-функции, но InternetSetStatusCallback не вызывается.
Различаются заголовки HTTP, которые используются при обращении ServerManager.exe к tomcat, при использовании встроенной и сторонней wininet.dll. Встроенная wininet: POST /1CEduWeb/servlet/AxisServlet HTTP/1.1 Accept: text/xml Host: euclid SOAPAction: "1" Content-Type: text/xml Content-Length: 433 User-Agent: Borland SOAP 1.1 Connection: Keep-Alive HTTP/1.1 200 OK Set-Cookie: JSESSIONID=9EBBE41DEC4526EA12D3C2762C2765EB; Path=/1CEduWeb Content-Type: text/xml; charset=utf-8 Transfer-Encoding: chunked Date: Fri, 27 Jun 2008 08:59:49 GMT Server: Apache Coyote/1.0 wininet из Windows: POST /1CEduWeb/servlet/AxisServlet HTTP/1.0 Accept: text/xml SOAPAction: "1" Content-Type: text/xml User-Agent: Borland SOAP 1.1 Host: euclid:8080 Content-Length: 433 Connection: Keep-Alive Pragma: no-cache HTTP/1.1 200 OK Set-Cookie: JSESSIONID=9FA7631C050ED305CFD3D24FE290B088; Path=/1CEduWeb Content-Type: text/xml; charset=utf-8 Date: Fri, 27 Jun 2008 09:01:44 GMT Server: Apache Coyote/1.0 Connection: close
Нашёл, в чём проблема. Всё дело в том, что wininet из Win пишет в заголовке HTTP/1.0, а из Wine - HTTP/1.1. Если заменить в dlls/wininet/http.c в 3-х местах g_szHttp1_1 на g_szHttp1_0, то клиент запускается. Сервер тоже запускается, но не с первого раза.
Можно на этом остановиться, а можно написать какие-нибудь тесты для включения в основной Wine.
На Win98 и WinXP использующая wininet программа посылает заголовок с HTTP/1.1
Решение для wininet есть, в общем-то работает - клиент подключается без вопросов, сервер может быть иногда не успевает зарегистрировать tomcat. Дальнейшее правильное решение отложено на багу 2010.
Откатил патч: commit 745674ddfdb60a54fcf8d35684e3586f3b056d0d Author: Alexander Morozov <amorozov@builder.office.etersoft.ru> Date: Fri Jun 27 14:40:20 2008 +0400 wininet: Hack for loading 1C:Obrazovanie client (eterbug #1822) Посоветовался с lav@: бага не актуальна, и решать её не надо.