Changeset e20a6a9 for apps


Ignore:
Timestamp:
Feb 3, 2019 4:31:26 PM (16 months ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
bd6cf53d
Parents:
0e710f87
Message:

i2ptunnel: Fix HTTP websockets by passing through
Connection headers containing "upgrade" (ticket #2422)
Client-side change only. Server-side todo.

Location:
apps/i2ptunnel/java/src/net/i2p/i2ptunnel
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/HTTPResponseOutputStream.java

    r0e710f87 re20a6a9  
    175175                            String lcKey = key.toLowerCase(Locale.US);
    176176                            if ("connection".equals(lcKey)) {
    177                                 out.write(DataHelper.getASCII("Connection: close\r\n"));
     177                                if (val.toLowerCase(Locale.US).contains("upgrade")) {
     178                                    // pass through for websocket
     179                                    out.write(DataHelper.getASCII("Connection: " + val + "\r\n"));
     180                                    proxyConnectionSent = true;
     181                                } else {
     182                                    out.write(DataHelper.getASCII("Connection: close\r\n"));
     183                                }
    178184                                connectionSent = true;
    179185                            } else if ("proxy-connection".equals(lcKey)) {
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java

    r0e710f87 re20a6a9  
    415415            String referer = null;
    416416            URI origRequestURI = null;
     417            boolean preserveConnectionHeader = false;
    417418            while((line = reader.readLine(method)) != null) {
    418419                line = line.trim();
     
    422423
    423424                String lowercaseLine = line.toLowerCase(Locale.US);
    424                 if(lowercaseLine.startsWith("connection: ") ||
    425                         lowercaseLine.startsWith("keep-alive: ") ||
    426                         lowercaseLine.startsWith("proxy-connection: ")) {
    427                     continue;
    428                 }
    429425
    430426                if(method == null) { // first line (GET /base64/realaddr)
     
    941937
    942938                } else {
    943                     if(lowercaseLine.startsWith("host: ") && !usingWWWProxy && !usingInternalOutproxy) {
     939                    if (lowercaseLine.startsWith("connection: ")) {
     940                        if (lowercaseLine.contains("upgrade")) {
     941                            // pass through for websocket
     942                            preserveConnectionHeader = true;
     943                        } else {
     944                            continue;
     945                        }
     946                    } else if (lowercaseLine.startsWith("keep-alive: ") ||
     947                               lowercaseLine.startsWith("proxy-connection: ")) {
     948                        continue;
     949                    } else if (lowercaseLine.startsWith("host: ") && !usingWWWProxy && !usingInternalOutproxy) {
    944950                        // Note that we only pass the original Host: line through to the outproxy
    945951                        // But we don't create a Host: line if it wasn't sent to us
     
    10821088                        }
    10831089                    }
    1084                     newRequest.append("Connection: close\r\n\r\n");
     1090                    if (preserveConnectionHeader)
     1091                        newRequest.append("\r\n");
     1092                    else
     1093                        newRequest.append("Connection: close\r\n\r\n");
    10851094                    s.setSoTimeout(0);
    10861095                    break;
Note: See TracChangeset for help on using the changeset viewer.