diff options
Diffstat (limited to 'WWW/Library')
-rw-r--r-- | WWW/Library/Implementation/HTAccess.c | 2 | ||||
-rw-r--r-- | WWW/Library/Implementation/HTFile.c | 4 | ||||
-rw-r--r-- | WWW/Library/Implementation/HTMIME.c | 6 | ||||
-rw-r--r-- | WWW/Library/Implementation/HTMLDTD.c | 5 | ||||
-rw-r--r-- | WWW/Library/Implementation/HTPlain.c | 6 | ||||
-rw-r--r-- | WWW/Library/Implementation/HTTP.c | 1045 | ||||
-rw-r--r-- | WWW/Library/Implementation/SGML.c | 321 | ||||
-rw-r--r-- | WWW/Library/Implementation/SGML.h | 4 | ||||
-rw-r--r-- | WWW/Library/Implementation/UCAux.h | 22 |
9 files changed, 660 insertions, 755 deletions
diff --git a/WWW/Library/Implementation/HTAccess.c b/WWW/Library/Implementation/HTAccess.c index edb91b51..90b56d3b 100644 --- a/WWW/Library/Implementation/HTAccess.c +++ b/WWW/Library/Implementation/HTAccess.c @@ -311,7 +311,7 @@ PUBLIC BOOL override_proxy ARGS1( if ((!templ_port || templ_port == port) && (t_len > 0 && t_len <= h_len && - !strncmp(Host + h_len - t_len, no_proxy, t_len))) { + !strncasecomp(Host + h_len - t_len, no_proxy, t_len))) { FREE(host); return YES; } diff --git a/WWW/Library/Implementation/HTFile.c b/WWW/Library/Implementation/HTFile.c index 0b0a830c..5459cbf6 100644 --- a/WWW/Library/Implementation/HTFile.c +++ b/WWW/Library/Implementation/HTFile.c @@ -877,7 +877,7 @@ PUBLIC HTFormat HTCharsetFormat ARGS3( *cp4 = '\0'; cp4 = cp3; chndl = UCGetLYhndl_byMIME(cp3); - if (UCCanTranslateFromTo(chndl, current_char_set) != TQ_NO) { + if (UCCanTranslateFromTo(chndl, current_char_set)) { chartrans_ok = YES; *cp1 = '\0'; format = HTAtom_for(cp); @@ -890,7 +890,7 @@ PUBLIC HTFormat HTCharsetFormat ARGS3( ** Got something but we don't recognize it. */ chndl = UCLYhndl_for_unrec; - if (UCCanTranslateFromTo(chndl, current_char_set) != TQ_NO) { + if (UCCanTranslateFromTo(chndl, current_char_set)) { chartrans_ok = YES; HTAnchor_setUCInfoStage(anchor, chndl, UCT_STAGE_MIME, diff --git a/WWW/Library/Implementation/HTMIME.c b/WWW/Library/Implementation/HTMIME.c index f165a6a2..556459c5 100644 --- a/WWW/Library/Implementation/HTMIME.c +++ b/WWW/Library/Implementation/HTMIME.c @@ -378,7 +378,7 @@ PRIVATE void HTMIME_put_character ARGS2( cp4 = cp3; chndl = UCGetLYhndl_byMIME(cp3); if (UCCanTranslateFromTo(chndl, - current_char_set) != TQ_NO) { + current_char_set)) { chartrans_ok = YES; *cp1 = '\0'; me->format = HTAtom_for(cp); @@ -391,7 +391,7 @@ PRIVATE void HTMIME_put_character ARGS2( recognize it */ chndl = UCLYhndl_for_unrec; if (UCCanTranslateFromTo(chndl, - current_char_set) != TQ_NO) { + current_char_set)) { chartrans_ok = YES; *cp1 = '\0'; me->format = HTAtom_for(cp); @@ -2284,7 +2284,7 @@ PUBLIC void HTmmdecode ARGS2( *p = TOLOWER(*p); invalid = ((LYhndl = UCGetLYhndl_byMIME(s+2)) < 0 || UCCanTranslateFromTo(LYhndl, - current_char_set) != TQ_NO); + current_char_set)); *qm2 = '?'; } if (!invalid) { diff --git a/WWW/Library/Implementation/HTMLDTD.c b/WWW/Library/Implementation/HTMLDTD.c index 58326ed7..e0dbe2e8 100644 --- a/WWW/Library/Implementation/HTMLDTD.c +++ b/WWW/Library/Implementation/HTMLDTD.c @@ -1215,7 +1215,6 @@ static CONST UC_entity_info extra_entities[] = { /* {"smid", 0x????}, shortmid # ISOamsr */ }; - /* Attribute Lists ** --------------- ** @@ -2662,9 +2661,9 @@ PUBLIC CONST SGML_dtd HTML_dtd = { tags, HTML_ELEMENTS, entities, - sizeof(entities)/sizeof(char*), + sizeof(entities)/sizeof(entities[0]), extra_entities, - sizeof(extra_entities)/sizeof(UC_entity_info), + sizeof(extra_entities)/sizeof(extra_entities[0]) }; /* This function fills the "tags" part of the HTML_dtd structure with diff --git a/WWW/Library/Implementation/HTPlain.c b/WWW/Library/Implementation/HTPlain.c index cc121ce6..73feeccc 100644 --- a/WWW/Library/Implementation/HTPlain.c +++ b/WWW/Library/Implementation/HTPlain.c @@ -153,7 +153,8 @@ PRIVATE void HTPlain_put_character ARGS2( } else if ((unsigned char)c > 160) { if (!HTPassEightBitRaw && current_char_set != 0) { - int len, high, low, i, diff = 1; + size_t len, high, low, i; + int diff = 1; CONST char * name; UCode_t value = (UCode_t)((unsigned char)c - 160); @@ -528,7 +529,8 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l) /* ** Out of luck, so use the UHHH notation (ugh). - FM */ - int len, high, low, i, diff=1; + size_t len, high, low, i; + int diff = 1; CONST char * name; int value = (int)(code - 160); diff --git a/WWW/Library/Implementation/HTTP.c b/WWW/Library/Implementation/HTTP.c index 268cb4d0..d1354911 100644 --- a/WWW/Library/Implementation/HTTP.c +++ b/WWW/Library/Implementation/HTTP.c @@ -1,9 +1,9 @@ -/* HyperText Tranfer Protocol - Client implementation HTTP.c +/* HyperText Tranfer Protocol - Client implementation HTTP.c ** ========================== ** Modified: -** 27 Jan 1994 PDM Added Ari Luotonen's Fix for Reload when using proxy -** servers. -** 28 Apr 1997 AJL,FM Do Proxy Authorisation. +** 27 Jan 1994 PDM Added Ari Luotonen's Fix for Reload when using proxy +** servers. +** 28 Apr 1997 AJL,FM Do Proxy Authorisation. */ #include "HTUtils.h" @@ -19,7 +19,7 @@ #define INIT_LINE_SIZE 1024 /* Start with line buffer this big */ #define LINE_EXTEND_THRESH 256 /* Minimum read size */ -#define VERSION_LENGTH 20 /* for returned protocol version */ +#define VERSION_LENGTH 20 /* for returned protocol version */ #include "HTParse.h" #include "HTTCP.h" @@ -37,7 +37,7 @@ /* #define TRACE 1 */ -struct _HTStream +struct _HTStream { HTStreamClass * isa; }; @@ -47,7 +47,7 @@ extern char * HTAppVersion; /* Application version: please supply */ extern char * personal_mail_address; /* User's name/email address */ extern char * LYUserAgent; /* Lynx User-Agent string */ extern BOOL LYNoRefererHeader; /* Never send Referer header? */ -extern BOOL LYNoRefererForThis; /* No Referer header for this URL? */ +extern BOOL LYNoRefererForThis; /* No Referer header for this URL? */ extern BOOL LYNoFromHeader; /* Never send From header? */ extern BOOL LYSetCookies; /* Act on Set-Cookie headers? */ @@ -59,9 +59,9 @@ PUBLIC BOOL redirect_post_content = FALSE; /* Don't convert to GET? */ extern char LYUserSpecifiedURL; /* Is the URL a goto? */ -extern BOOL keep_mime_headers; /* Include mime headers and force source dump */ +extern BOOL keep_mime_headers; /* Include mime headers and force source dump */ extern BOOL no_url_redirection; /* Don't follow Location: URL for */ -extern char *http_error_file; /* Store HTTP status code in this file */ +extern char *http_error_file; /* Store HTTP status code in this file */ extern BOOL traversal; /* TRUE if we are doing a traversal */ extern BOOL dump_output_immediately; /* TRUE if no interactive user */ @@ -92,7 +92,7 @@ extern char * LYCookie PARAMS(( ** arg is the hypertext reference of the article to be loaded. ** ** On exit, -** returns >=0 If no error, a good socket number +** returns >=0 If no error, a good socket number ** <0 Error. ** ** The socket must be closed by the caller after the document has been @@ -100,23 +100,23 @@ extern char * LYCookie PARAMS(( ** */ PRIVATE int HTLoadHTTP ARGS4 ( - CONST char *, arg, + CONST char *, arg, HTParentAnchor *, anAnchor, HTFormat, format_out, HTStream*, sink) { int s; /* Socket number for returned data */ CONST char *url = arg; /* The URL which get_physical() returned */ - char *command = NULL; /* The whole command */ + char *command = NULL; /* The whole command */ char *eol; /* End of line if found */ char *start_of_data; /* Start of body of reply */ int status; /* tcp return */ int bytes_already_read; - char crlf[3]; /* A CR LF equivalent string */ + char crlf[3]; /* A CR LF equivalent string */ HTStream *target; /* Unconverted data */ HTFormat format_in; /* Format arriving in the message */ - BOOL do_head = FALSE; /* Whether or not we should do a head */ - BOOL do_post = FALSE; /* ARE WE posting ? */ + BOOL do_head = FALSE; /* Whether or not we should do a head */ + BOOL do_post = FALSE; /* ARE WE posting ? */ char *METHOD; BOOL had_header; /* Have we had at least one header? */ @@ -128,7 +128,7 @@ PRIVATE int HTLoadHTTP ARGS4 ( BOOL first_Accept = TRUE; BOOL show_401 = FALSE; BOOL show_407 = FALSE; - BOOL auth_proxy = NO; /* Generate a proxy authorization. - AJL */ + BOOL auth_proxy = NO; /* Generate a proxy authorization. - AJL */ int length, rv; BOOL doing_redirect, already_retrying = FALSE, bad_location = FALSE; @@ -187,16 +187,16 @@ try_again: ** Interrupt cleanly. */ if (TRACE) - fprintf (stderr, - "HTTP: Interrupted on connect; recovering cleanly.\n"); + fprintf (stderr, + "HTTP: Interrupted on connect; recovering cleanly.\n"); _HTProgress ("Connection interrupted."); status = HT_NOT_LOADED; goto done; } if (status < 0) { - if (TRACE) - fprintf(stderr, - "HTTP: Unable to connect to remote host for `%s' (errno = %d).\n", + if (TRACE) + fprintf(stderr, + "HTTP: Unable to connect to remote host for `%s' (errno = %d).\n", url, SOCKET_ERRNO); HTAlert("Unable to connect to remote host."); status = HT_NOT_LOADED; @@ -210,25 +210,25 @@ try_again: char * p1 = (HTParse(url, "", PARSE_PATH|PARSE_PUNCTUATION)); if (do_post) { - METHOD = "POST"; - StrAllocCopy(command, "POST "); + METHOD = "POST"; + StrAllocCopy(command, "POST "); } else if (do_head) { - METHOD = "HEAD"; - StrAllocCopy(command, "HEAD "); + METHOD = "HEAD"; + StrAllocCopy(command, "HEAD "); } else { - METHOD = "GET"; - StrAllocCopy(command, "GET "); + METHOD = "GET"; + StrAllocCopy(command, "GET "); } /* - ** If we are using a proxy gateway don't copy in the first slash - ** of say: /gopher://a;lkdjfl;ajdf;lkj/;aldk/adflj - ** so that just gopher://.... is sent. + ** If we are using a proxy gateway don't copy in the first slash + ** of say: /gopher://a;lkdjfl;ajdf;lkj/;aldk/adflj + ** so that just gopher://.... is sent. */ if (using_proxy) - StrAllocCat(command, p1+1); + StrAllocCat(command, p1+1); else - StrAllocCat(command, p1); + StrAllocCat(command, p1); FREE(p1); } if (extensions) { @@ -249,33 +249,33 @@ try_again: } if (!HTPresentations) - HTFormatInit(); + HTFormatInit(); n = HTList_count(HTPresentations); first_Accept = TRUE; len = 0; for (i = 0; i < n; i++) { - HTPresentation *pres = + HTPresentation *pres = (HTPresentation *)HTList_objectAt(HTPresentations, i); - if (pres->rep_out == WWW_PRESENT) { + if (pres->rep_out == WWW_PRESENT) { if (pres->rep != WWW_SOURCE && strcasecomp(HTAtom_name(pres->rep), "www/mime") && strcasecomp(HTAtom_name(pres->rep), "www/compressed") && pres->quality <= 1.0 && pres->quality >= 0.0) { if (pres->quality < 1.0) { if (pres->maxbytes > 0) { - sprintf(temp, ";q=%4.3f;mxb=%ld", - pres->quality, pres->maxbytes); + sprintf(temp, ";q=%4.3f;mxb=%ld", + pres->quality, pres->maxbytes); } else { - sprintf(temp, ";q=%4.3f", pres->quality); + sprintf(temp, ";q=%4.3f", pres->quality); } } else if (pres->maxbytes > 0) { sprintf(temp, ";mxb=%ld", pres->maxbytes); } else { temp[0] = '\0'; } - sprintf(line, "%s%s%s", - (first_Accept ? + sprintf(line, "%s%s%s", + (first_Accept ? "Accept: " : ", "), HTAtom_name(pres->rep), temp); @@ -283,28 +283,28 @@ try_again: if (len > 252 && !first_Accept) { StrAllocCat(command, crlf); sprintf(line, "Accept: %s%s", - HTAtom_name(pres->rep), + HTAtom_name(pres->rep), temp); len = strlen(line); } - StrAllocCat(command, line); + StrAllocCat(command, line); first_Accept = FALSE; } - } + } } sprintf(line, "%s*/*;q=0.01%c%c", - (first_Accept ? + (first_Accept ? "Accept: " : ", "), CR, LF); StrAllocCat(command, line); first_Accept = FALSE; len = 0; sprintf(line, "Accept-Encoding: %s, %s%c%c", - "gzip", "compress", CR, LF); + "gzip", "compress", CR, LF); StrAllocCat(command, line); if (language && *language) { - sprintf(line, "Accept-Language: %s%c%c", language, CR, LF); + sprintf(line, "Accept-Language: %s%c%c", language, CR, LF); StrAllocCat(command, line); } @@ -329,10 +329,10 @@ try_again: ** over 406 (Not Acceptable) replies. - FM */ if (!do_post) { - sprintf(line, "Negotiate: trans%c%c", CR, LF); - StrAllocCat(command, line); + sprintf(line, "Negotiate: trans%c%c", CR, LF); + StrAllocCat(command, line); } - + /* ** When reloading give no-cache pragma to proxy server to make ** it refresh its cache. -- Ari L. <luotonen@dxcern.cern.ch> @@ -340,33 +340,32 @@ try_again: ** Also send it as a Cache-Control header for HTTP/1.1. - FM */ if (reloading) { - sprintf(line, "Pragma: no-cache%c%c", CR, LF); - StrAllocCat(command, line); - sprintf(line, "Cache-Control: no-cache%c%c", CR, LF); - StrAllocCat(command, line); + sprintf(line, "Pragma: no-cache%c%c", CR, LF); + StrAllocCat(command, line); + sprintf(line, "Cache-Control: no-cache%c%c", CR, LF); + StrAllocCat(command, line); } - reloading = FALSE; /* Now turn it off again if on */ if (LYUserAgent && *LYUserAgent) { - sprintf(line, "User-Agent: %s%c%c", LYUserAgent, CR, LF); + sprintf(line, "User-Agent: %s%c%c", LYUserAgent, CR, LF); } else { - sprintf(line, "User-Agent: %s/%s libwww-FM/%s%c%c", - HTAppName ? HTAppName : "unknown", + sprintf(line, "User-Agent: %s/%s libwww-FM/%s%c%c", + HTAppName ? HTAppName : "unknown", HTAppVersion ? HTAppVersion : "0.0", HTLibraryVersion, CR, LF); } StrAllocCat(command, line); if (personal_mail_address && !LYNoFromHeader) { - sprintf(line, "From: %s%c%c", personal_mail_address, CR,LF); - StrAllocCat(command, line); + sprintf(line, "From: %s%c%c", personal_mail_address, CR,LF); + StrAllocCat(command, line); } if (!(LYUserSpecifiedURL || LYNoRefererHeader || LYNoRefererForThis) && strcmp(HTLoadedDocumentURL(), "")) { char *cp = HTLoadedDocumentURL(); - StrAllocCat(command, "Referer: "); + StrAllocCat(command, "Referer: "); if (!strncasecomp(cp, "LYNXIMGMAP:", 11)) { char *cp1 = strchr(cp, '#'); if (cp1) @@ -377,30 +376,30 @@ try_again: } else { StrAllocCat(command, cp); } - sprintf(line, "%c%c", CR, LF); - StrAllocCat(command, line); + sprintf(line, "%c%c", CR, LF); + StrAllocCat(command, line); } { - char *abspath; + char *abspath; char *docname; - char *hostname; - char *colon; - int portnumber; - char *auth, *cookie = NULL; + char *hostname; + char *colon; + int portnumber; + char *auth, *cookie = NULL; BOOL secure = (strncmp(anAnchor->address, "https", 5) ? FALSE : TRUE); - abspath = HTParse(url, "", PARSE_PATH|PARSE_PUNCTUATION); - docname = HTParse(url, "", PARSE_PATH); - hostname = HTParse(url, "", PARSE_HOST); - if (hostname && - NULL != (colon = strchr(hostname, ':'))) { - *(colon++) = '\0'; /* Chop off port number */ - portnumber = atoi(colon); - } else if (!strncmp(url, "https", 5)) { + abspath = HTParse(arg, "", PARSE_PATH|PARSE_PUNCTUATION); + docname = HTParse(arg, "", PARSE_PATH); + hostname = HTParse(arg, "", PARSE_HOST); + if (hostname && + NULL != (colon = strchr(hostname, ':'))) { + *(colon++) = '\0'; /* Chop off port number */ + portnumber = atoi(colon); + } else if (!strncmp(arg, "https", 5)) { portnumber = HTTPS_PORT; - } else { + } else { portnumber = HTTP_PORT; } @@ -410,10 +409,10 @@ try_again: */ if (using_proxy) { /* - ** If we are using a proxy, first determine if - ** we should include an Authorization header - ** and/or Cookie header for the ultimate target - ** of this request. - FM & AJL + ** If we are using a proxy, first determine if + ** we should include an Authorization header + ** and/or Cookie header for the ultimate target + ** of this request. - FM & AJL */ char *host2 = NULL, *path2 = NULL; int port2 = (strncmp(docname, "https", 5) ? @@ -429,8 +428,8 @@ try_again: } } /* - ** This composeAuth() does file access, i.e., for - ** the ultimate target of the request. - AJL + ** This composeAuth() does file access, i.e., for + ** the ultimate target of the request. - AJL */ auth_proxy = NO; if ((auth = HTAA_composeAuth(host2, port2, path2, @@ -439,7 +438,7 @@ try_again: /* ** If auth is not NULL nor zero-length, it's ** an Authorization header to be included. - FM - */ + */ sprintf(line, "%s%c%c", auth, CR, LF); StrAllocCat(command, line); if (TRACE) @@ -472,8 +471,8 @@ try_again: "HTTP: Not sending authorization (yet).\n"); } /* - ** Add 'Cookie:' header, if it's HTTP or HTTPS - ** document being proxied. + ** Add 'Cookie:' header, if it's HTTP or HTTPS + ** document being proxied. */ if (!strncmp(docname, "http", 4)) { cookie = LYCookie(host2, path2, port2, secure); @@ -481,12 +480,12 @@ try_again: FREE(host2); FREE(path2); /* - ** The next composeAuth() will be for the proxy. - AJL + ** The next composeAuth() will be for the proxy. - AJL */ auth_proxy = YES; } else { /* - ** Add cookie for a non-proxied request. - FM + ** Add cookie for a non-proxied request. - FM */ cookie = LYCookie(hostname, abspath, portnumber, secure); auth_proxy = NO; @@ -496,27 +495,27 @@ try_again: */ if (cookie != NULL) { if (*cookie != '$') { - /* + /* ** It's a historical cookie, so signal to the ** server that we support modern cookies. - FM */ StrAllocCat(command, "Cookie2: $Version=\"1\""); StrAllocCat(command, crlf); - if (TRACE) - fprintf(stderr, + if (TRACE) + fprintf(stderr, "HTTP: Sending Cookie2: $Version =\"1\"\n"); } if (*cookie != '\0') { - /* + /* ** It's not a zero-length string, so add the header. ** Note that any folding of long strings has been ** done already in LYCookie.c. - FM */ - StrAllocCat(command, "Cookie: "); - StrAllocCat(command, cookie); + StrAllocCat(command, "Cookie: "); + StrAllocCat(command, cookie); StrAllocCat(command, crlf); - if (TRACE) - fprintf(stderr, "HTTP: Sending Cookie: %s\n", cookie); + if (TRACE) + fprintf(stderr, "HTTP: Sending Cookie: %s\n", cookie); } FREE(cookie); } @@ -529,39 +528,39 @@ try_again: ** still be NO, and we check here for whether we want an ** Authorization header. - FM & AJL */ - if ((auth = HTAA_composeAuth(hostname, + if ((auth = HTAA_composeAuth(hostname, portnumber, docname, auth_proxy)) != NULL && *auth != '\0') { /* - ** If auth is not NULL nor zero-length, it's - ** an Authorization or Proxy-Authorization - ** header to be included. - FM - */ - sprintf(line, "%s%c%c", auth, CR, LF); - StrAllocCat(command, line); + ** If auth is not NULL nor zero-length, it's + ** an Authorization or Proxy-Authorization + ** header to be included. - FM + */ + sprintf(line, "%s%c%c", auth, CR, LF); + StrAllocCat(command, line); if (TRACE) - fprintf(stderr, + fprintf(stderr, (auth_proxy ? "HTTP: Sending proxy authorization: %s\n" : "HTTP: Sending authorization: %s\n"), auth); } else if (auth && *auth == '\0') { /* - ** If auth is a zero-length string, the user either - ** cancelled or goofed at the username and password - ** prompt. - FM + ** If auth is a zero-length string, the user either + ** cancelled or goofed at the username and password + ** prompt. - FM */ if (!(traversal || dump_output_immediately) && - HTConfirm("Proceed without a username and password?")) { + HTConfirm("Proceed without a username and password?")) { if (auth_proxy == TRUE) { show_407 = TRUE; } else { show_401 = TRUE; } } else { - if (traversal || dump_output_immediately) + if (traversal || dump_output_immediately) HTAlert("Can't proceed without a username and password."); FREE(command); FREE(hostname); @@ -569,15 +568,15 @@ try_again: status = HT_NOT_LOADED; goto done; } - } else { + } else { if (TRACE) - fprintf(stderr, + fprintf(stderr, (auth_proxy ? "HTTP: Not sending proxy authorization (yet).\n" : "HTTP: Not sending authorization (yet).\n")); - } - FREE(hostname); - FREE(docname); + } + FREE(hostname); + FREE(docname); } auth_proxy = NO; } @@ -585,22 +584,22 @@ try_again: if (do_post) { if (TRACE) - fprintf (stderr, "HTTP: Doing post, content-type '%s'\n", - anAnchor->post_content_type ? anAnchor->post_content_type - : "lose"); + fprintf (stderr, "HTTP: Doing post, content-type '%s'\n", + anAnchor->post_content_type ? anAnchor->post_content_type + : "lose"); sprintf (line, "Content-type: %s%c%c", - anAnchor->post_content_type ? anAnchor->post_content_type + anAnchor->post_content_type ? anAnchor->post_content_type : "lose", CR, LF); StrAllocCat(command, line); { - int content_length; - if (!anAnchor->post_data) - content_length = 0; - else - content_length = strlen (anAnchor->post_data); - sprintf (line, "Content-length: %d%c%c", - content_length, CR, LF); - StrAllocCat(command, line); + int content_length; + if (!anAnchor->post_data) + content_length = 0; + else + content_length = strlen (anAnchor->post_data); + sprintf (line, "Content-length: %d%c%c", + content_length, CR, LF); + StrAllocCat(command, line); } StrAllocCat(command, crlf); /* Blank line means "end" of headers */ @@ -610,9 +609,12 @@ try_again: else StrAllocCat(command, crlf); /* Blank line means "end" of headers */ - if (TRACE) - fprintf (stderr, "Writing:\n%s----------------------------------\n", - command); + if (TRACE) { + fprintf (stderr, + "Writing:\n%s%s----------------------------------\n", + command, + (anAnchor->post_data ? crlf : "")); + } _HTProgress ("Sending HTTP request."); @@ -620,33 +622,33 @@ try_again: FREE(command); if (status <= 0) { if (status == 0) { - if (TRACE) - fprintf (stderr, "HTTP: Got status 0 in initial write\n"); - /* Do nothing. */ + if (TRACE) + fprintf (stderr, "HTTP: Got status 0 in initial write\n"); + /* Do nothing. */ } else if ((SOCKET_ERRNO == ENOTCONN || - SOCKET_ERRNO == ECONNRESET || + SOCKET_ERRNO == ECONNRESET || SOCKET_ERRNO == EPIPE) && !already_retrying && /* Don't retry if we're posting. */ !do_post) { - /* - ** Arrrrgh, HTTP 0/1 compability problem, maybe. + /* + ** Arrrrgh, HTTP 0/1 compability problem, maybe. */ - if (TRACE) - fprintf (stderr, - "HTTP: BONZO ON WRITE Trying again with HTTP0 request.\n"); - _HTProgress ("Retrying as HTTP0 request."); - HTTP_NETCLOSE(s, handle); - extensions = NO; - already_retrying = TRUE; - goto try_again; + if (TRACE) + fprintf (stderr, + "HTTP: BONZO ON WRITE Trying again with HTTP0 request.\n"); + _HTProgress ("Retrying as HTTP0 request."); + HTTP_NETCLOSE(s, handle); + extensions = NO; + already_retrying = TRUE; + goto try_again; } else { - if (TRACE) - fprintf (stderr, + if (TRACE) + fprintf (stderr, "HTTP: Hit unexpected network WRITE error; aborting connection.\n"); - HTTP_NETCLOSE(s, handle); - status = -1; - HTAlert("Unexpected network write error; connection aborted."); - goto done; + HTTP_NETCLOSE(s, handle); + status = -1; + HTAlert("Unexpected network write error; connection aborted."); + goto done; } } @@ -665,102 +667,102 @@ try_again: line_buffer = (char *)calloc(1, (buffer_length * sizeof(char))); do {/* Loop to read in the first line */ - /* + /* ** Extend line buffer if necessary for those crazy WAIS URLs ;-) */ - if (buffer_length - length < LINE_EXTEND_THRESH) { - buffer_length = buffer_length + buffer_length; - line_buffer = - (char *)realloc(line_buffer, (buffer_length * sizeof(char))); - } - if (TRACE) - fprintf (stderr, "HTTP: Trying to read %d\n", - buffer_length - length - 1); - status = HTTP_NETREAD(s, line_buffer + length, - buffer_length - length - 1, handle); - if (TRACE) - fprintf (stderr, "HTTP: Read %d\n", status); - if (status <= 0) { - /* - * Retry if we get nothing back too. - * Bomb out if we get nothing twice. + if (buffer_length - length < LINE_EXTEND_THRESH) { + buffer_length = buffer_length + buffer_length; + line_buffer = + (char *)realloc(line_buffer, (buffer_length * sizeof(char))); + } + if (TRACE) + fprintf (stderr, "HTTP: Trying to read %d\n", + buffer_length - length - 1); + status = HTTP_NETREAD(s, line_buffer + length, + buffer_length - length - 1, handle); + if (TRACE) + fprintf (stderr, "HTTP: Read %d\n", status); + if (status <= 0) { + /* + * Retry if we get nothing back too. + * Bomb out if we get nothing twice. */ - if (status == HT_INTERRUPTED) { - if (TRACE) - fprintf (stderr, "HTTP: Interrupted initial read.\n"); - _HTProgress ("Connection interrupted."); - HTTP_NETCLOSE(s, handle); + if (status == HT_INTERRUPTED) { + if (TRACE) + fprintf (stderr, "HTTP: Interrupted initial read.\n"); + _HTProgress ("Connection interrupted."); + HTTP_NETCLOSE(s, handle); status = HT_NO_DATA; - goto clean_up; - } else if (status < 0 && + goto clean_up; + } else if (status < 0 && (SOCKET_ERRNO == ENOTCONN || - SOCKET_ERRNO == ECONNRESET || + SOCKET_ERRNO == ECONNRESET || SOCKET_ERRNO == EPIPE) && !already_retrying && !do_post) { - /* + /* ** Arrrrgh, HTTP 0/1 compability problem, maybe. */ - if (TRACE) - fprintf (stderr, - "HTTP: BONZO Trying again with HTTP0 request.\n"); - HTTP_NETCLOSE(s, handle); - FREE(line_buffer); - FREE(line_kept_clean); - - extensions = NO; - already_retrying = TRUE; - _HTProgress ("Retrying as HTTP0 request."); - goto try_again; - } else { - if (TRACE) - fprintf (stderr, + if (TRACE) + fprintf (stderr, + "HTTP: BONZO Trying again with HTTP0 request.\n"); + HTTP_NETCLOSE(s, handle); + FREE(line_buffer); + FREE(line_kept_clean); + + extensions = NO; + already_retrying = TRUE; + _HTProgress ("Retrying as HTTP0 request."); + goto try_again; + } else { + if (TRACE) + fprintf (stderr, "HTTP: Hit unexpected network read error; aborting connection; status %d.\n", status); - HTAlert("Unexpected network read error; connection aborted."); - HTTP_NETCLOSE(s, handle); - status = -1; - goto clean_up; - } - } + HTAlert("Unexpected network read error; connection aborted."); + HTTP_NETCLOSE(s, handle); + status = -1; + goto clean_up; + } + } - bytes_already_read += status; - sprintf (line, "Read %d bytes of data.", bytes_already_read); - HTProgress (line); + bytes_already_read += status; + sprintf (line, "Read %d bytes of data.", bytes_already_read); + HTProgress (line); #ifdef UCX /* UCX returns -1 on EOF */ - if (status == 0 || status == -1) + if (status == 0 || status == -1) #else - if (status == 0) + if (status == 0) #endif - { - end_of_file = YES; - break; - } - line_buffer[length+status] = 0; - - if (line_buffer) { - FREE(line_kept_clean); - line_kept_clean = (char *)malloc(buffer_length * sizeof(char)); - memcpy(line_kept_clean, line_buffer, buffer_length); - } - - eol = strchr(line_buffer + length, LF); - /* Do we *really* want to do this? */ - if (eol && eol != line_buffer && *(eol-1) == CR) - *(eol-1) = ' '; - - length = length + status; - - /* Do we really want to do *this*? */ - if (eol) - *eol = 0; /* Terminate the line */ + { + end_of_file = YES; + break; + } + line_buffer[length+status] = 0; + + if (line_buffer) { + FREE(line_kept_clean); + line_kept_clean = (char *)malloc(buffer_length * sizeof(char)); + memcpy(line_kept_clean, line_buffer, buffer_length); + } + + eol = strchr(line_buffer + length, LF); + /* Do we *really* want to do this? */ + if (eol && eol != line_buffer && *(eol-1) == CR) + *(eol-1) = ' '; + + length = length + status; + + /* Do we really want to do *this*? */ + if (eol) + *eol = 0; /* Terminate the line */ } - /* All we need is the first line of the response. If it's a HTTP/1.0 - ** response, then the first line will be absurdly short and therefore - ** we can safely gate the number of bytes read through this code - ** (as opposed to below) to ~1000. + /* All we need is the first line of the response. If it's a HTTP/1.0 + ** response, then the first line will be absurdly short and therefore + ** we can safely gate the number of bytes read through this code + ** (as opposed to below) to ~1000. ** - ** Well, let's try 100. + ** Well, let's try 100. */ while (!eol && !end_of_file && bytes_already_read < 100); } /* Scope of loop variables */ @@ -776,18 +778,18 @@ try_again: ** Kludge to work with old buggy servers and the VMS Help gateway. ** They can't handle the third word, so we try again without it. */ - if (extensions && /* Old buggy server or Help gateway? */ + if (extensions && /* Old buggy server or Help gateway? */ (0==strncmp(line_buffer,"<TITLE>Bad File Request</TITLE>",31) || 0==strncmp(line_buffer,"Address should begin with",25) || 0==strncmp(line_buffer,"<TITLE>Help ",12) || 0==strcmp(line_buffer, - "Document address invalid or access not authorised"))) { + "Document address invalid or access not authorised"))) { FREE(line_buffer); FREE(line_kept_clean); extensions = NO; already_retrying = TRUE; if (TRACE) - fprintf(stderr, "HTTP: close socket %d to retry with HTTP0\n", s); + fprintf(stderr, "HTTP: close socket %d to retry with HTTP0\n", s); HTTP_NETCLOSE(s, handle); /* print a progress message */ _HTProgress ("Retrying as HTTP0 request."); @@ -803,11 +805,11 @@ try_again: server_version[0] = 0; fields = sscanf(line_buffer, "%20s %d", - server_version, - &server_status); + server_version, + &server_status); if (TRACE) - fprintf (stderr, "HTTP: Scanned %d fields from line_buffer\n", fields); + fprintf (stderr, "HTTP: Scanned %d fields from line_buffer\n", fields); if (http_error_file) { /* Make the status code externally available */ FILE *error_file; @@ -828,35 +830,35 @@ try_again: } /* - ** Rule out a non-HTTP/1.n reply as best we can. + ** Rule out a non-HTTP/1.n reply as best we can. */ if (fields < 2 || !server_version[0] || server_version[0] != 'H' || - server_version[1] != 'T' || server_version[2] != 'T' || - server_version[3] != 'P' || server_version[4] != '/' || - server_version[6] != '.') { + server_version[1] != 'T' || server_version[2] != 'T' || + server_version[3] != 'P' || server_version[4] != '/' || + server_version[6] != '.') { /* * Ugh! An HTTP0 reply, */ - HTAtom * encoding; + HTAtom * encoding; - if (TRACE) - fprintf (stderr, "--- Talking HTTP0.\n"); + if (TRACE) + fprintf (stderr, "--- Talking HTTP0.\n"); - format_in = HTFileFormat(url, &encoding, NULL); + format_in = HTFileFormat(url, &encoding, NULL); /* ** Treat all plain text as HTML. - ** This sucks but its the only solution without - ** without looking at content. - */ - if (!strncmp(HTAtom_name(format_in), "text/plain",10)) { - if (TRACE) - fprintf(stderr, - "HTTP: format_in being changed to text/HTML\n"); - format_in = WWW_HTML; - } + ** This sucks but its the only solution without + ** without looking at content. + */ + if (!strncmp(HTAtom_name(format_in), "text/plain",10)) { + if (TRACE) + fprintf(stderr, + "HTTP: format_in being changed to text/HTML\n"); + format_in = WWW_HTML; + } if (!IsUnityEnc(encoding)) { /* - ** Change the format to that for "www/compressed". + ** Change the format to that for "www/compressed". */ if (TRACE) { fprintf(stderr, @@ -872,25 +874,25 @@ try_again: } } - start_of_data = line_kept_clean; + start_of_data = line_kept_clean; } else { - /* + /* ** Set up to decode full HTTP/1.n response. - FM */ - format_in = HTAtom_for("www/mime"); - if (TRACE) - fprintf (stderr, "--- Talking HTTP1.\n"); + format_in = HTAtom_for("www/mime"); + if (TRACE) + fprintf (stderr, "--- Talking HTTP1.\n"); - /* + /* ** We set start_of_data to "" when !eol here because there - ** will be a put_block done below; we do *not* use the value - ** of start_of_data (as a pointer) in the computation of - ** length (or anything else) when !eol. Otherwise, set the + ** will be a put_block done below; we do *not* use the value + ** of start_of_data (as a pointer) in the computation of + ** length (or anything else) when !eol. Otherwise, set the ** value of length to what we have beyond eol (i.e., beyond ** the status line). - FM */ - start_of_data = eol ? eol + 1 : ""; - length = eol ? length - (start_of_data - line_buffer) : 0; + start_of_data = eol ? eol + 1 : ""; + length = eol ? length - (start_of_data - line_buffer) : 0; /* ** Trim trailing spaces in line_buffer so that we can use @@ -902,74 +904,74 @@ try_again: /* ** Take appropriate actions based on the status. - FM */ - switch (server_status/100) { + switch (server_status/100) { case 1: /* - ** HTTP/1.1 Informational statuses. - ** 100 Continue. - ** 101 Switching Protocols. - ** > 101 is unknown. - ** We should never get these, and they have only - ** the status line and possibly other headers, - ** so we'll deal with them by showing the full - ** header to the user as text/plain. - FM + ** HTTP/1.1 Informational statuses. + ** 100 Continue. + ** 101 Switching Protocols. + ** > 101 is unknown. + ** We should never get these, and they have only + ** the status line and possibly other headers, + ** so we'll deal with them by showing the full + ** header to the user as text/plain. - FM */ HTAlert("Got unexpected Informational Status."); do_head = TRUE; break; - case 2: + case 2: /* - ** Good: Got MIME object! (Successful) - FM + ** Good: Got MIME object! (Successful) - FM */ if (do_head) { - /* + /* * If HEAD was requested, show headers (and possibly * bogus body) for all 2xx status codes as text/plain - KW */ HTProgress(line_buffer); - break; + break; } switch (server_status) { case 204: - /* + /* * No Content. */ - HTAlert(line_buffer); - HTTP_NETCLOSE(s, handle); - status = HT_NO_DATA; - goto clean_up; + HTAlert(line_buffer); + HTTP_NETCLOSE(s, handle); + status = HT_NO_DATA; + goto clean_up; break; case 205: - /* + /* * Reset Content. The server has fulfilled the * request but nothing is returned and we should * reset any form content. We'll instruct the * user to do that, and restore the current * document. - FM */ - HTAlert("Request fulfilled. Reset Content."); - HTTP_NETCLOSE(s, handle); - status = HT_NO_DATA; - goto clean_up; + HTAlert("Request fulfilled. Reset Content."); + HTTP_NETCLOSE(s, handle); + status = HT_NO_DATA; + goto clean_up; break; case 206: - /* + /* * Partial Content. We didn't send a Range - * so something went wrong somewhere. Show + * so something went wrong somewhere. Show * the status message and restore the current * document. - FM */ - HTAlert(line_buffer); - HTTP_NETCLOSE(s, handle); - status = HT_NO_DATA; - goto clean_up; + HTAlert(line_buffer); + HTTP_NETCLOSE(s, handle); + status = HT_NO_DATA; + goto clean_up; break; default: - /* + /* * 200 OK. * 201 Created. * 202 Accepted. @@ -979,33 +981,33 @@ try_again: */ HTProgress(line_buffer); } /* case 2 switch */ - break; + break; - case 3: + case 3: /* - ** Various forms of Redirection. - FM - ** 300 Multiple Choices. - ** 301 Moved Permanently. - ** 302 Found (temporary; we can, and do, use GET). - ** 303 See Other (temporary; always use GET). - ** 304 Not Modified. - ** 305 Use Proxy. - ** 306 Set Proxy. - ** 307 Temporary Redirect with method retained. - ** > 308 is unknown. + ** Various forms of Redirection. - FM + ** 300 Multiple Choices. + ** 301 Moved Permanently. + ** 302 Found (temporary; we can, and do, use GET). + ** 303 See Other (temporary; always use GET). + ** 304 Not Modified. + ** 305 Use Proxy. + ** 306 Set Proxy. + ** 307 Temporary Redirect with method retained. + ** > 308 is unknown. */ if (no_url_redirection || do_head || keep_mime_headers) { - /* + /* * If any of these flags are set, we do not redirect, * but instead show what was returned to the user as * text/plain. - FM */ HTProgress(line_buffer); - break; + break; } if (server_status == 300) { /* Multiple Choices */ - /* + /* * For client driven content negotiation. The server * should be sending some way for the user-agent to * make a selection, so we'll show the user whatever @@ -1025,9 +1027,9 @@ try_again: if (!dump_output_immediately && format_out == HTAtom_for("www/download")) { /* - * Convert a download request to - * a presentation request for - * interactive users. - FM + * Convert a download request to + * a presentation request for + * interactive users. - FM */ format_out = WWW_PRESENT; } @@ -1035,21 +1037,21 @@ try_again: } if (server_status == 304) { /* Not Modified */ - /* + /* * We didn't send an "If-Modified-Since" header, * so this status is inappropriate. We'll deal * with it by showing the full header to the user * as text/plain. - FM */ HTAlert("Got unexpected 304 Not Modified status."); - do_head = TRUE; + do_head = TRUE; break; } if (server_status == 305 || server_status == 306 || server_status > 307) { - /* + /* * Show user the content, if any, for 305, 306, * or unknown status. - FM */ @@ -1062,44 +1064,44 @@ try_again: if (!dump_output_immediately && format_out == HTAtom_for("www/download")) { /* - * Convert a download request to - * a presentation request for - * interactive users. - FM + * Convert a download request to + * a presentation request for + * interactive users. - FM */ format_out = WWW_PRESENT; } break; } - /* - * We do not load the file, but read the headers for - * the "Location:", check out that redirecting_url - * and if it's acceptible (e.g., not a telnet URL - * when we have that disabled), initiate a new fetch. - * If that's another redirecting_url, we'll repeat the - * checks, and fetch initiations if acceptible, until - * we reach the actual URL, or the redirection limit - * set in HTAccess.c is exceeded. If the status was 301 - * indicating that the relocation is permanent, we set - * the permanent_redirection flag to make it permanent - * for the current anchor tree (i.e., will persist until - * the tree is freed or the client exits). If the - * redirection would include POST content, we seek - * confirmation from an interactive user, with option to - * use 303 for 301 (but not for 307), and otherwise refuse - * the redirection. We also don't allow permanent - * redirection if we keep POST content. If we don't find - * the Location header or it's value is zero-length, we - * display whatever the server returned, and the user - * should RELOAD that to try again, or make a selection - * from it if it contains links, or Left-Arrow to the - * previous document. - FM + /* + * We do not load the file, but read the headers for + * the "Location:", check out that redirecting_url + * and if it's acceptible (e.g., not a telnet URL + * when we have that disabled), initiate a new fetch. + * If that's another redirecting_url, we'll repeat the + * checks, and fetch initiations if acceptible, until + * we reach the actual URL, or the redirection limit + * set in HTAccess.c is exceeded. If the status was 301 + * indicating that the relocation is permanent, we set + * the permanent_redirection flag to make it permanent + * for the current anchor tree (i.e., will persist until + * the tree is freed or the client exits). If the + * redirection would include POST content, we seek + * confirmation from an interactive user, with option to + * use 303 for 301 (but not for 307), and otherwise refuse + * the redirection. We also don't allow permanent + * redirection if we keep POST content. If we don't find + * the Location header or it's value is zero-length, we + * display whatever the server returned, and the user + * should RELOAD that to try again, or make a selection + * from it if it contains links, or Left-Arrow to the + * previous document. - FM */ { char *cp; if ((dump_output_immediately || traversal) && - do_post && + do_post && server_status != 303 && server_status != 302 && server_status != 301) { @@ -1123,35 +1125,35 @@ try_again: while ((status = HTTP_NETREAD(s, line_buffer, (INIT_LINE_SIZE - 1), handle)) > 0) { - line_buffer[status] = '\0'; + line_buffer[status] = '\0'; StrAllocCat(line_kept_clean, line_buffer); } HTTP_NETCLOSE(s, handle); - if (status == HT_INTERRUPTED) { + if (status == HT_INTERRUPTED) { /* * Impatient user. - FM */ - if (TRACE) - fprintf (stderr, "HTTP: Interrupted followup read.\n"); - _HTProgress ("Connection interrupted."); - status = HT_INTERRUPTED; - goto clean_up; - } + if (TRACE) + fprintf (stderr, "HTTP: Interrupted followup read.\n"); + _HTProgress ("Connection interrupted."); + status = HT_INTERRUPTED; + goto clean_up; + } doing_redirect = TRUE; if (server_status == 301) { /* Moved Permanently */ - HTProgress(line_buffer); + HTProgress(line_buffer); if (do_post) { - /* + /* * Don't make the redirection permanent * if we have POST content. - FM */ if (TRACE) - fprintf(stderr, + fprintf(stderr, "HTTP: Have POST content. Treating 301 (Permanent) as Temporary.\n"); HTAlert( "Have POST content. Treating Permanent Redirection as Temporary.\n"); } else { - permanent_redirection = TRUE; + permanent_redirection = TRUE; } } @@ -1159,25 +1161,25 @@ try_again: ** Look for "Set-Cookie:" and "Set-Cookie2:" headers. - FM */ if (LYSetCookies == TRUE) { - char *value = NULL; + char *value = NULL; char *SetCookie = NULL; char *SetCookie2 = NULL; - cp = line_kept_clean; + cp = line_kept_clean; while (*cp) { /* ** Assume a CRLF pair terminates ** the header section. - FM */ if (*cp == CR) { - if (*(cp+1) == LF && + if (*(cp+1) == LF && *(cp+2) == CR && *(cp+3) == LF) { break; - } + } } if (TOUPPER(*cp) != 'S') { - cp++; - } else if (!strncasecomp(cp, "Set-Cookie:", 11)) { - char *cp1 = NULL, *cp2 = NULL; + cp++; + } else if (!strncasecomp(cp, "Set-Cookie:", 11)) { + char *cp1 = NULL, *cp2 = NULL; cp += 11; Cookie_continuation: /* @@ -1191,11 +1193,11 @@ Cookie_continuation: if (((cp1 = strchr(cp, LF)) != NULL) || (cp2 = strchr(cp, CR)) != NULL) { if (*cp1) { - *cp1 = '\0'; + *cp1 = '\0'; if ((cp2 = strchr(cp, CR)) != NULL) *cp2 = '\0'; } else { - *cp2 = '\0'; + *cp2 = '\0'; } } if (*cp == '\0') { @@ -1246,7 +1248,7 @@ Cookie_continuation: } FREE(value); } else if (!strncasecomp(cp, "Set-Cookie2:", 12)) { - char *cp1 = NULL, *cp2 = NULL; + char *cp1 = NULL, *cp2 = NULL; cp += 12; Cookie2_continuation: /* @@ -1260,11 +1262,11 @@ Cookie2_continuation: if (((cp1 = strchr(cp, LF)) != NULL) || (cp2 = strchr(cp, CR)) != NULL) { if (*cp1) { - *cp1 = '\0'; + *cp1 = '\0'; if ((cp2 = strchr(cp, CR)) != NULL) *cp2 = '\0'; } else { - *cp2 = '\0'; + *cp2 = '\0'; } } if (*cp == '\0') { @@ -1273,7 +1275,7 @@ Cookie2_continuation: if (cp2) *cp2 = CR; if (value != NULL) { - HTMIME_TrimDoubleQuotes(value); + HTMIME_TrimDoubleQuotes(value); if (SetCookie2 == NULL) { StrAllocCopy(SetCookie2, value); } else { @@ -1315,7 +1317,7 @@ Cookie2_continuation: } FREE(value); } else { - cp++; + cp++; } } FREE(value); @@ -1331,25 +1333,25 @@ Cookie2_continuation: */ cp = line_kept_clean; while (*cp) { - if (TOUPPER(*cp) != 'L') { + if (TOUPPER(*cp) != 'L') { cp++; - } else if (!strncasecomp(cp, "Location:", 9)) { - char *cp1 = NULL, *cp2 = NULL; - cp += 9; + } else if (!strncasecomp(cp, "Location:", 9)) { + char *cp1 = NULL, *cp2 = NULL; + cp += 9; /* - * Trim leading spaces. - FM + * Trim leading spaces. - FM */ while (isspace((unsigned char)*cp)) - cp++; + cp++; /* - * Accept CRLF, LF, or CR as end of header. - FM + * Accept CRLF, LF, or CR as end of header. - FM */ if (((cp1 = strchr(cp, LF)) != NULL) || - (cp2 = strchr(cp, CR)) != NULL) { + (cp2 = strchr(cp, CR)) != NULL) { if (*cp1) { *cp1 = '\0'; if ((cp2 = strchr(cp, CR)) != NULL) - *cp2 = '\0'; + *cp2 = '\0'; } else { *cp2 = '\0'; } @@ -1361,17 +1363,17 @@ Cookie2_continuation: HTMIME_TrimDoubleQuotes(redirecting_url); if (*redirecting_url == '\0') { /* - * The "Location:" value is zero-length, and - * thus is probably something in the body, so - * we'll show the user what was returned. - FM + * The "Location:" value is zero-length, and + * thus is probably something in the body, so + * we'll show the user what was returned. - FM */ if (TRACE) - fprintf(stderr, + fprintf(stderr, "HTTP: 'Location:' is zero-length!\n"); if (cp1) - *cp1 = LF; + *cp1 = LF; if (cp2) - *cp2 = CR; + *cp2 = CR; bad_location = TRUE; FREE(redirecting_url); HTAlert( @@ -1386,28 +1388,28 @@ Cookie2_continuation: * seek the document at that Location. - FM */ HTProgress(line_buffer); - if (TRACE) - fprintf(stderr, - "HTTP: Picked up location '%s'\n", + if (TRACE) + fprintf(stderr, + "HTTP: Picked up location '%s'\n", redirecting_url); if (cp1) - *cp1 = LF; - if (cp2) - *cp2 = CR; + *cp1 = LF; + if (cp2) + *cp2 = CR; if (server_status == 305) { /* Use Proxy */ /* - * Make sure the proxy field ends with - * a slash. - FM + * Make sure the proxy field ends with + * a slash. - FM */ if (redirecting_url[strlen(redirecting_url)-1] - != '/') + != '/') StrAllocCat(redirecting_url, "/"); /* - * Append our URL. - FM + * Append our URL. - FM */ StrAllocCat(redirecting_url, anAnchor->address); if (TRACE) - fprintf(stderr, + fprintf(stderr, "HTTP: Proxy URL is '%s'\n", redirecting_url); } @@ -1415,13 +1417,13 @@ Cookie2_continuation: server_status == 303 || server_status == 302) { /* - * We don't have POST content (nor support PUT - * or DELETE), or the status is "See Other" or - * "General Redirection" and we can convert to - * GET, so go back and check out the new URL. - FM + * We don't have POST content (nor support PUT + * or DELETE), or the status is "See Other" or + * "General Redirection" and we can convert to + * GET, so go back and check out the new URL. - FM */ - status = HT_REDIRECTING; - goto clean_up; + status = HT_REDIRECTING; + goto clean_up; } /* * Make sure the user wants to redirect @@ -1430,41 +1432,41 @@ Cookie2_continuation: switch (HTConfirmPostRedirect(redirecting_url, server_status)) { /* - * User failed to confirm. - * Abort the fetch. + * User failed to confirm. + * Abort the fetch. */ case 0: - doing_redirect = FALSE; + doing_redirect = FALSE; FREE(redirecting_url); status = HT_NO_DATA; goto clean_up; - + /* - * User wants to treat as GET with no content. - * Go back to check out the URL. + * User wants to treat as GET with no content. + * Go back to check out the URL. */ case 303: status = HT_REDIRECTING; goto clean_up; /* - * Set the flag to retain the POST - * content and go back to check out - * the URL. - FM + * Set the flag to retain the POST + * content and go back to check out + * the URL. - FM */ default: status = HT_REDIRECTING; redirect_post_content = TRUE; goto clean_up; - } + } } - break; - } else { + break; + } else { /* - * Keep looking for the Location header. - FM + * Keep looking for the Location header. - FM */ - cp++; - } + cp++; + } } /* @@ -1472,8 +1474,8 @@ Cookie2_continuation: * header, so we'll show the user what we got, if * anything. - FM */ - if (TRACE) - fprintf (stderr, "HTTP: Failed to pick up location.\n"); + if (TRACE) + fprintf (stderr, "HTTP: Failed to pick up location.\n"); doing_redirect = FALSE; permanent_redirection = FALSE; start_of_data = line_kept_clean; @@ -1499,13 +1501,13 @@ Cookie2_continuation: break; } - case 4: + case 4: /* - ** "I think I goofed!" (Client Error) - FM + ** "I think I goofed!" (Client Error) - FM */ - switch (server_status) { - case 401: /* Unauthorized */ - /* + switch (server_status) { + case 401: /* Unauthorized */ + /* * Authorization for orgin server required. * If show_401 is set, proceed to showing the * 401 body. Otherwise, if we can set up @@ -1520,42 +1522,42 @@ Cookie2_continuation: if (HTAA_shouldRetryWithAuth(start_of_data, length, (void *)handle, s, NO)) { - HTTP_NETCLOSE(s, handle); - if (dump_output_immediately && !authentication_info[0]) { - fprintf(stderr, - "HTTP: Access authorization required.\n"); - fprintf(stderr, - " Use the -auth=id:pw parameter.\n"); - status = HT_NO_DATA; - goto clean_up; - } - - if (TRACE) - fprintf(stderr, "%s %d %s\n", - "HTTP: close socket", s, - "to retry with Access Authorization"); - - _HTProgress ( - "Retrying with access authorization information."); + HTTP_NETCLOSE(s, handle); + if (dump_output_immediately && !authentication_info[0]) { + fprintf(stderr, + "HTTP: Access authorization required.\n"); + fprintf(stderr, + " Use the -auth=id:pw parameter.\n"); + status = HT_NO_DATA; + goto clean_up; + } + + if (TRACE) + fprintf(stderr, "%s %d %s\n", + "HTTP: close socket", s, + "to retry with Access Authorization"); + + _HTProgress ( + "Retrying with access authorization information."); FREE(line_buffer); FREE(line_kept_clean); - goto try_again; - break; + goto try_again; + break; } else if (!(traversal || dump_output_immediately) && - HTConfirm("Show the 401 message body?")) { + HTConfirm("Show the 401 message body?")) { break; - } else { + } else { if (traversal || dump_output_immediately) - HTAlert( + HTAlert( "Can't retry with authorization! Contact the server's WebMaster."); HTTP_NETCLOSE(s, handle); - status = -1; - goto clean_up; + status = -1; + goto clean_up; } break; case 407: - /* + /* * Authorization for proxy server required. * If we are not in fact using a proxy, or * show_407 is set, proceed to showing the @@ -1571,29 +1573,29 @@ Cookie2_continuation: if (HTAA_shouldRetryWithAuth(start_of_data, length, (void *)handle, s, YES)) { - HTTP_NETCLOSE(s, handle); - if (dump_output_immediately && !proxyauth_info[0]) { - fprintf(stderr, - "HTTP: Proxy authorization required.\n"); - fprintf(stderr, - " Use the -pauth=id:pw parameter.\n"); - status = HT_NO_DATA; - goto clean_up; - } - - if (TRACE) - fprintf(stderr, "%s %d %s\n", - "HTTP: close socket", s, - "to retry with Proxy Authorization"); - - _HTProgress ( - "Retrying with proxy authorization information."); + HTTP_NETCLOSE(s, handle); + if (dump_output_immediately && !proxyauth_info[0]) { + fprintf(stderr, + "HTTP: Proxy authorization required.\n"); + fprintf(stderr, + " Use the -pauth=id:pw parameter.\n"); + status = HT_NO_DATA; + goto clean_up; + } + + if (TRACE) + fprintf(stderr, "%s %d %s\n", + "HTTP: close socket", s, + "to retry with Proxy Authorization"); + + _HTProgress ( + "Retrying with proxy authorization information."); FREE(line_buffer); FREE(line_kept_clean); - goto try_again; - break; + goto try_again; + break; } else if (!(traversal || dump_output_immediately) && - HTConfirm("Show the 407 message body?")) { + HTConfirm("Show the 407 message body?")) { if (!dump_output_immediately && format_out == HTAtom_for("www/download")) { /* @@ -1604,29 +1606,29 @@ Cookie2_continuation: format_out = WWW_PRESENT; } break; - } else { + } else { if (traversal || dump_output_immediately) - HTAlert( + HTAlert( "Can't retry with proxy authorization! Contact the server's WebMaster."); HTTP_NETCLOSE(s, handle); - status = -1; - goto clean_up; + status = -1; + goto clean_up; } break; case 408: - /* + /* * Request Timeout. Show the status message * and restore the current document. - FM */ - HTAlert(line_buffer); - HTTP_NETCLOSE(s, handle); - status = HT_NO_DATA; - goto done; + HTAlert(line_buffer); + HTTP_NETCLOSE(s, handle); + status = HT_NO_DATA; + goto done; break; - default: - /* + default: + /* * 400 Bad Request. * 402 Payment Required. * 403 Forbidden. @@ -1655,28 +1657,28 @@ Cookie2_continuation: if (!dump_output_immediately && format_out == HTAtom_for("www/download")) { /* - * Convert a download request to - * a presentation request for - * interactive users. - FM + * Convert a download request to + * a presentation request for + * interactive users. - FM */ format_out = WWW_PRESENT; } - break; - } /* case 4 switch */ - break; + break; + } /* case 4 switch */ + break; - case 5: + case 5: /* - ** "I think YOU goofed!" (server error) - ** 500 Internal Server Error - ** 501 Not Implemented - ** 502 Bad Gateway - ** 503 Service Unavailable - ** 504 Gateway Timeout - ** 505 HTTP Version Not Supported - ** > 505 is unknown. - ** Should always include a message, which - ** we always should display. - FM + ** "I think YOU goofed!" (server error) + ** 500 Internal Server Error + ** 501 Not Implemented + ** 502 Bad Gateway + ** 503 Service Unavailable + ** 504 Gateway Timeout + ** 505 HTTP Version Not Supported + ** > 505 is unknown. + ** Should always include a message, which + ** we always should display. - FM */ HTAlert(line_buffer); if (traversal) { @@ -1693,15 +1695,15 @@ Cookie2_continuation: */ format_out = WWW_PRESENT; } - break; + break; - default: + default: /* - ** Bad or unknown server_status number. - ** Take a chance and hope there is - ** something to display. - FM + ** Bad or unknown server_status number. + ** Take a chance and hope there is + ** something to display. - FM */ - HTAlert("Unknown status reply from server!"); + HTAlert("Unknown status reply from server!"); HTAlert(line_buffer); if (traversal) { HTTP_NETCLOSE(s, handle); @@ -1717,10 +1719,10 @@ Cookie2_continuation: */ format_out = WWW_PRESENT; } - break; - } /* Switch on server_status/100 */ + break; + } /* Switch on server_status/100 */ - } /* Full HTTP reply */ + } /* Full HTTP reply */ } /* scope of fields */ /* @@ -1736,15 +1738,15 @@ Cookie2_continuation: } target = HTStreamStack(format_in, - format_out, - sink, anAnchor); + format_out, + sink, anAnchor); if (!target || target == NULL) { char buffer[1024]; /* @@@@@@@@ */ HTTP_NETCLOSE(s, handle); sprintf(buffer, "Sorry, no known way of converting %s to %s.", - HTAtom_name(format_in), HTAtom_name(format_out)); + HTAtom_name(format_in), HTAtom_name(format_out)); _HTProgress (buffer); status = -1; goto clean_up; @@ -1770,31 +1772,31 @@ Cookie2_continuation: goto clean_up; } - if (rv == -2) { + if (rv == -2) { /* ** Aw hell, a REAL error, maybe cuz it's a dumb HTTP0 server */ (*target->isa->_abort)(target, NULL); HTTP_NETCLOSE(s, handle); if (!already_retrying && !do_post) { - if (TRACE) - fprintf (stderr, "HTTP: Trying again with HTTP0 request.\n"); - /* - ** May as well consider it an interrupt -- right? - */ - FREE(line_buffer); - FREE(line_kept_clean); - extensions = NO; - already_retrying = TRUE; - _HTProgress ("Retrying as HTTP0 request."); - goto try_again; + if (TRACE) + fprintf (stderr, "HTTP: Trying again with HTTP0 request.\n"); + /* + ** May as well consider it an interrupt -- right? + */ + FREE(line_buffer); + FREE(line_kept_clean); + extensions = NO; + already_retrying = TRUE; + _HTProgress ("Retrying as HTTP0 request."); + goto try_again; } else { - status = HT_NOT_LOADED; + status = HT_NOT_LOADED; goto clean_up; } } - /* + /* ** Free if complete transmission (socket was closed before return). ** Close socket if partial transmission (was freed on abort). */ @@ -1811,9 +1813,9 @@ Cookie2_continuation: */ /* Lou's old comment: - FM */ /* OK, now we've got the redirection URL temporarily stored - in external variable redirecting_url, exported from HTMIME.c, - since there's no straightforward way to do this in the library - currently. Do the right thing. */ + in external variable redirecting_url, exported from HTMIME.c, + since there's no straightforward way to do this in the library + currently. Do the right thing. */ status = HT_REDIRECTING; } else { /* @@ -1835,6 +1837,7 @@ done: */ do_head = FALSE; do_post = FALSE; + reloading = FALSE; return status; } diff --git a/WWW/Library/Implementation/SGML.c b/WWW/Library/Implementation/SGML.c index fedd0f40..61f01f1c 100644 --- a/WWW/Library/Implementation/SGML.c +++ b/WWW/Library/Implementation/SGML.c @@ -5,7 +5,7 @@ ** SGML file, create this object which is a parser. The object ** is (currently) created by being passed a DTD structure, ** and a target HTStructured oject at which to throw the parsed stuff. -** +** ** 6 Feb 93 Binary seraches used. Intreface modified. */ @@ -37,7 +37,7 @@ #define FREE(x) if (x) {free(x); x = NULL;} PUBLIC HTCJKlang HTCJK = NOCJK; /* CJK enum value. */ -PUBLIC BOOL HTPassEightBitRaw = FALSE; /* Pass 161-172,174-255 raw. */ +PUBLIC BOOL HTPassEightBitRaw = FALSE; /* Pass 161-172,174-255 raw. */ PUBLIC BOOL HTPassEightBitNum = FALSE; /* Pass ^ numeric entities raw. */ PUBLIC BOOL HTPassHighCtrlRaw = FALSE; /* Pass 127-160,173, raw. */ PUBLIC BOOL HTPassHighCtrlNum = FALSE; /* Pass €-Ÿ raw. */ @@ -52,7 +52,7 @@ extern int LYlowest_eightbit[]; #define MAX_ATTRIBUTES 36 /* Max number of attributes per element */ - + /* Element Stack ** ------------- ** This allows us to return down the stack reselcting styles. @@ -71,7 +71,7 @@ struct _HTElement { struct _HTStream { CONST HTStreamClass * isa; /* inherited from HTStream */ - + CONST SGML_dtd *dtd; HTStructuredClass *actions; /* target class */ HTStructured *target; /* target object */ @@ -112,8 +112,8 @@ struct _HTStream { HTParentAnchor * node_anchor; LYUCcharset * inUCI; /* pointer to anchor UCInfo */ int inUCLYhndl; /* charset we are fed */ - LYUCcharset * outUCI; /* anchor UCInfo for target */ - int outUCLYhndl; /* charset for target */ + LYUCcharset * outUCI; /* anchor UCInfo for target */ + int outUCLYhndl; /* charset for target */ char utf_count; UCode_t utf_char; char utf_buf[8]; @@ -144,13 +144,13 @@ PRIVATE void set_chartrans_handling ARGS3( chndl = HTAnchor_getUCLYhndl(anchor, UCT_STAGE_STRUCTURED); if (chndl < 0) /* - ** That wasn't set either, so seek the HText default. - FM + ** That wasn't set either, so seek the HText default. - FM */ chndl = HTAnchor_getUCLYhndl(anchor, UCT_STAGE_HTEXT); if (chndl < 0) /* - ** That wasn't set either, so assume the current display - ** character set. - FM + ** That wasn't set either, so assume the current display + ** character set. - FM */ chndl = current_char_set; /* @@ -173,18 +173,18 @@ PRIVATE void set_chartrans_handling ARGS3( UCT_STAGE_STRUCTURED); } /* - ** Set the in->out transformation parameters. - FM + ** Set the in->out transformation parameters. - FM */ UCSetTransParams(&context->T, context->inUCLYhndl, context->inUCI, context->outUCLYhndl, context->outUCI); /* - ** This is intended for passing the SGML parser's input - ** charset as an argument in each call to the HTML - ** parser's start tag function, but it would be better - ** to call a Lynx_HTML_parser function to set an element - ** in its HTStructured object, itself, if this were - ** needed. - FM + ** This is intended for passing the SGML parser's input + ** charset as an argument in each call to the HTML + ** parser's start tag function, but it would be better + ** to call a Lynx_HTML_parser function to set an element + ** in its HTStructured object, itself, if this were + ** needed. - FM */ if (HTCJK != NOCJK) { context->current_tag_charset = -1; @@ -200,7 +200,7 @@ PRIVATE void set_chartrans_handling ARGS3( context->current_tag_charset = UCGetLYhndl_byMIME("unicode-1-1-utf-8"); } else { context->current_tag_charset = 0; - } + } } PRIVATE void change_chartrans_handling ARGS1( @@ -261,14 +261,14 @@ PRIVATE void handle_attribute_name ARGS2( int high, low, i, diff; /* - ** Ignore unknown tag. - KW + ** Ignore unknown tag. - KW */ if (tag == context->unknown_tag) { return; } /* - ** Binary search for attribute name. + ** Binary search for attribute name. */ for (low = 0, high = tag->number_of_attributes; high > low; @@ -286,9 +286,9 @@ PRIVATE void handle_attribute_name ARGS2( #endif return; } /* if */ - + } /* for */ - + if (TRACE) fprintf(stderr, "SGML: Unknown attribute %s for tag %s\n", s, context->current_tag->name); @@ -327,7 +327,13 @@ PRIVATE void handle_attribute_value ARGS2( /* -** translate some Unicodes to Lynx special codes and output them. +** Translate some Unicodes to Lynx special codes and output them. +** Special codes - ones those output depend on parsing. +** +** Additional issue, like handling bidirectional text if nesseccery +** may be called from here: zwnj (8204), zwj (8205), lrm (8206), rlm (8207) +** - currently they are passed to def7_uni.tbl as regular characters. +** */ PRIVATE BOOL put_special_unicodes ARGS2( HTStream *, context, @@ -346,13 +352,20 @@ PRIVATE BOOL put_special_unicodes ARGS2( } else if (code == 8194 || code == 8195 || code == 8201) { /* ** Use Lynx special character for ensp, emsp or thinsp. + ** + ** Originally, Lynx use space '32' as word delimiter and omits this + ** space at end of line if word is wrapped to the next line. There + ** are several other spaces in the Unicode repertoire and we should + ** teach Lynx to understand them, not only as regular characters but + ** in the context of line wrapping. Unfortunately, if we use + ** HT_EM_SPACE we override the chartrans tables for those spaces + ** (e.g., emsp= double space) with a single '32' for all (but do line + ** wrapping more fancy). In the future we need HT_SPACE with a + ** transferred parameter (Unicode number) which falls back to + ** chartrans if line wrapping is not the case. + ** */ PUTC(HT_EM_SPACE); - } else if (code == 8211 || code == 8212) { - /* - ** Use ASCII hyphen for ndash/endash or mdash/emdash. - */ - PUTC('-'); } else { /* ** Return NO if nothing done. @@ -391,49 +404,14 @@ PRIVATE void handle_entity ARGS2( HTStream *, context, char, term) { - CONST char ** entities = context->dtd->entity_names; UCode_t code; long uck; CONST char *s = context->string->data; int high, low, i, diff; - /* - ** Use Lynx special characters for nbsp (160), ensp (8194), - ** emsp (8195), thinsp (8201), and shy (173). - FM - */ - if (!strcmp(s, "nbsp")) { - PUTC(HT_NON_BREAK_SPACE); - FoundEntity = TRUE; - return; - } - if (!strcmp(s, "ensp") || !strcmp(s, "emsp") || !strcmp(s, "thinsp")) { - PUTC(HT_EM_SPACE); - FoundEntity = TRUE; - return; - } - if (!strcmp(s, "shy")) { - PUTC(LY_SOFT_HYPHEN); - FoundEntity = TRUE; - return; - } - -#ifdef NOTUSED_FOTEMODS - /* - ** For ndash or endash (8211), and mdash or emdash (8212), - ** use an ASCII hyphen (32). - FM - */ - if (!strcmp(s, "ndash") || - !strcmp(s, "endash") || - !strcmp(s, "mdash") || - !strcmp(s, "endash")) { - PUTC('-'); - FoundEntity = TRUE; - return; - } -#endif /* NOTUSED_FOTEMODS */ /* - ** Handle all other entities normally. - FM + ** Handle named entities. */ FoundEntity = FALSE; if ((code = HTMLGetEntityUCValue(s)) != 0) { @@ -441,12 +419,13 @@ PRIVATE void handle_entity ARGS2( ** We got a Unicode value for the entity name. ** Check for special Unicodes. - FM */ - if (put_special_unicodes(context, code)) { + if (put_special_unicodes(context, code)) { FoundEntity = TRUE; return; } /* - ** Seek a translation from the chartrans tables. + ** No special unicodes - + ** seek a translation from the chartrans tables. */ if ((uck = UCTransUniChar(code, context->outUCLYhndl)) >= 32 && uck < 256 && @@ -499,55 +478,12 @@ PRIVATE void handle_entity ARGS2( return; } } -#ifdef NOTUSED_FOTEMODS - /* - ** Ignore zwnj (8204) and zwj (8205), if we get to here. - ** Note that zwnj may have been handled as <WBR> - ** by the calling function. - FM - */ - if (!strcmp(s, "zwnj") || - !strcmp(s, "zwj")) { - if (TRACE) { - fprintf(stderr, "handle_entity: Ignoring '%s'.\n", s); - } - FoundEntity = TRUE; - return; - } - - /* - ** Ignore lrm (8206), and rln (8207), if we get to here. - FM - */ - if (!strcmp(s, "lrm") || - !strcmp(s, "rlm")) { - if (TRACE) { - fprintf(stderr, "handle_entity: Ignoring '%s'.\n", s); - } - FoundEntity = TRUE; - return; - } -#endif /* NOTUSED_FOTEMODS */ - - /* - ** We haven't succeeded yet, so try the old LYCharSets - ** arrays for translation strings. - FM - */ - for (low = 0, high = context->dtd->number_of_entities; - high > low; - diff < 0 ? (low = i+1) : (high = i)) { /* Binary search */ - i = (low + (high-low)/2); - diff = strcmp(entities[i], s); /* Case sensitive! */ - if (diff == 0) { /* success: found it */ - (*context->actions->put_entity)(context->target, i); - FoundEntity = TRUE; - return; - } - } /* ** If entity string not found, display as text. */ if (TRACE) - fprintf(stderr, "SGML: Unknown entity '%s'\n", s); + fprintf(stderr, "SGML: Unknown entity '%s'\n", s); PUTC('&'); { CONST char *p; @@ -732,7 +668,7 @@ PRIVATE void do_close_stacked ARGS1( PRIVATE int is_on_stack ARGS2( HTStream *, context, HTTag *, old_tag) -{ +{ HTElement * stacked = context->element_stack; int i = 1; for (; stacked; stacked = stacked->next, i++) { @@ -837,11 +773,11 @@ PRIVATE void end_element ARGS2( #ifdef WIND_DOWN_STACK while (context->element_stack) { /* Loop is error path only */ #else - if (context->element_stack) { /* Substitute and remove one stack element */ + if (context->element_stack) { /* Substitute and remove one stack element */ #endif /* WIND_DOWN_STACK */ HTElement * N = context->element_stack; HTTag * t = N->tag; - + if (old_tag != t) { /* Mismatch: syntax error */ if (context->element_stack->next) { /* This is not the last level */ if (TRACE) fprintf(stderr, @@ -854,7 +790,7 @@ PRIVATE void end_element ARGS2( return; /* Ignore */ } } - + context->element_stack = N->next; /* Remove from stack */ FREE(N); (*context->actions->end_element)(context->target, @@ -865,9 +801,9 @@ PRIVATE void end_element ARGS2( #else return; #endif /* WIND_DOWN_STACK */ - + /* Syntax error path only */ - + } if (TRACE) fprintf(stderr, "SGML: Extra end tag </%s> found and ignored.\n", @@ -941,7 +877,7 @@ PRIVATE void start_element ARGS1( return; } } - + if (context->element_stack && canclose_check == close_error && !(valid = element_valid_within( @@ -1120,7 +1056,7 @@ PRIVATE void SGML_free ARGS1( ** Free the strings and context structure. - FM */ HTChunkFree(context->string); - for (i = 0; i < MAX_ATTRIBUTES; i++) + for (i = 0; i < MAX_ATTRIBUTES; i++) FREE(context->value[i]); FREE(context); } @@ -1158,7 +1094,7 @@ PRIVATE void SGML_abort ARGS2( ** Free the strings and context structure. - FM */ HTChunkFree(context->string); - for (i = 0; i < MAX_ATTRIBUTES; i++) + for (i = 0; i < MAX_ATTRIBUTES; i++) FREE(context->value[i]); FREE(context); } @@ -1172,7 +1108,7 @@ PRIVATE void SGML_abort ARGS2( ** particular SGML context. */ -#ifdef CALLERDATA +#ifdef CALLERDATA PUBLIC void* SGML_callerData ARGS1( HTStream *, context) { @@ -1218,7 +1154,7 @@ PRIVATE void SGML_character ARGS2( */ if ((unsigned char)c > 127) { /* - ** We have an octet from a multibyte character. - FM + ** We have an octet from a multibyte character. - FM */ if (context->utf_count > 0 && (c & 0xc0) == 0x80) { context->utf_char = (context->utf_char << 6) | (c & 0x3f); @@ -1227,9 +1163,9 @@ PRIVATE void SGML_character ARGS2( (context->utf_buf_p)++; if (context->utf_count == 0) { /* - ** We have all of the bytes, so terminate - ** the buffer and set 'clong' to the UCode_t - ** value. - FM + ** We have all of the bytes, so terminate + ** the buffer and set 'clong' to the UCode_t + ** value. - FM */ *(context->utf_buf_p) = '\0'; clong = context->utf_char; @@ -1289,20 +1225,10 @@ PRIVATE void SGML_character ARGS2( } } -#ifdef NOTDEFINED - /* - ** If we have a koi8-r input and do not have - ** koi8-r as the output, save the raw input - ** in saved_char_in before we potentially - ** convert it to Unicode. - FM - */ - if (context->T.strip_raw_char_in) - saved_char_in = c; -#endif /* NOTDEFINED */ /* - ** If we want the raw input converted - ** to Unicode, try that now. - FM + ** If we want the raw input converted + ** to Unicode, try that now. - FM */ if (context->T.trans_to_uni && ((unsign_c >= 127) || @@ -1418,7 +1344,7 @@ top1: ** or HTCJK set. - FM */ #define PASSHICTRL (context->T.transp || \ - unsign_c >= LYlowest_eightbit[context->inUCLYhndl]) + unsign_c >= LYlowest_eightbit[context->inUCLYhndl]) if (c == 127 && !(PASSHICTRL || HTCJK != NOCJK)) return; @@ -1437,7 +1363,7 @@ top1: switch(context->state) { case S_in_kanji: - /* + /* ** Note that if we don't have a CJK input, then this ** is not the second byte of a CJK di-byte, and we're ** trashing the input. That's why 8-bit characters @@ -1455,13 +1381,13 @@ top1: if (HTCJK != NOCJK && (c & 0200) != 0) { /* ** Setting up for Kanji multibyte handling (based on - ** Takuya ASADA's (asada@three-a.co.jp) CJK Lynx). - ** Note that if the input is not in fact CJK, the - ** next byte also will be mishandled, as explained - ** above. Toggle raw mode off in such cases, or - ** select the "7 bit approximations" display - ** character set, which is largely equivalent - ** to having raw mode off with CJK. - FM + ** Takuya ASADA's (asada@three-a.co.jp) CJK Lynx). + ** Note that if the input is not in fact CJK, the + ** next byte also will be mishandled, as explained + ** above. Toggle raw mode off in such cases, or + ** select the "7 bit approximations" display + ** character set, which is largely equivalent + ** to having raw mode off with CJK. - FM */ context->state = S_in_kanji; PUTC(c); @@ -1525,7 +1451,7 @@ top1: saved_char_in = '\0'; /****************************************************************** * I. LATIN-1 OR UCS2 TO DISPLAY CHARSET - ******************************************************************/ + ******************************************************************/ } else if ((chk = (context->T.trans_from_uni && unsign_c >= 160)) && (uck = UCTransUniChar(unsign_c, context->outUCLYhndl)) >= 32 && @@ -1536,7 +1462,7 @@ top1: uck, FROMASCII((char)uck)); } /* - ** We got one octet from the conversions, so use it. - FM + ** We got one octet from the conversions, so use it. - FM */ PUTC(FROMASCII((char)uck)); } else if (chk && @@ -1548,9 +1474,9 @@ top1: */ (uck = UCTransUniCharStr(replace_buf, 60, clong, context->outUCLYhndl, - 0) >= 0)) { + 0) >= 0)) { /* - ** Got a replacement string. + ** Got a replacement string. ** No further tests for valididy - assume that whoever ** defined replacement strings knew what she was doing. - KW */ @@ -1636,7 +1562,7 @@ top1: } break; - /* + /* ** In litteral mode, waits only for specific end tag (for ** compatibility with old servers, and for Lynx). - FM */ @@ -1646,7 +1572,7 @@ top1: '/' : context->element_stack->tag->name[string->size-2])) { int i; - + /* ** If complete match, end litteral. */ @@ -1665,7 +1591,7 @@ top1: for (i = 0; i < string->size; i++) /* recover */ PUTC(string->data[i]); string->size = 0; - context->state = S_text; + context->state = S_text; } break; @@ -1677,11 +1603,11 @@ top1: /* ** Setting up for possible numeric entity. */ - context->state = S_cro; /* &# is Char Ref Open */ + context->state = S_cro; /* &# is Char Ref Open */ break; } context->state = S_entity; /* Fall through! */ - + /* ** Handle possible named entity. */ @@ -1719,9 +1645,9 @@ top1: "SGML_character: Handling 'zwnj' entity as 'WBR' element.\n"); } if (c != ';') { - sprintf(temp, "<WBR>%c", c); + sprintf(temp, "<WBR>%c", c); } else { - sprintf(temp, "<WBR>"); + sprintf(temp, "<WBR>"); } if (context->recover == NULL) { StrAllocCopy(context->recover, temp); @@ -1953,9 +1879,9 @@ top1: ** the standard semi-colon. - FM */ if (c != ';') { - sprintf(temp, "<WBR>%c", c); + sprintf(temp, "<WBR>%c", c); } else { - sprintf(temp, "<WBR>"); + sprintf(temp, "<WBR>"); } /* ** Add the replacement string to the @@ -1972,17 +1898,12 @@ top1: context->state = S_text; break; } - if (code == 160 || code == 173) { + /* - ** We *always* should interpret these as Latin1 here! - ** Output the Lynx special character for nbsp and - ** then recycle the terminator or break. - FM + ** Check for special Unicodes. */ - if (code == 160) { - PUTC(HT_NON_BREAK_SPACE); - } else { - PUTC(LY_SOFT_HYPHEN); - } + if (put_special_unicodes(context, code)) { + string->size = 0; context->isHex = FALSE; context->state = S_text; @@ -1991,7 +1912,8 @@ top1: break; } /* - ** Seek a translation from the chartrans tables. + ** No special unicodes - + ** seek a translation from the chartrans tables. */ if ((uck = UCTransUniChar(code, context->outUCLYhndl)) >= 32 && @@ -2023,7 +1945,7 @@ top1: */ (uck = UCTransUniCharStr(replace_buf, 60, code, context->outUCLYhndl, - 0) >= 0)) { + 0) >= 0)) { for (p = replace_buf; *p; p++) { PUTC(*p); } @@ -2114,11 +2036,6 @@ top1: ** ensp, emsp or thinsp. - FM */ PUTC(HT_EM_SPACE); - } else if (code == 8211 || code == 8212) { - /* - ** ndash or mdash. - FM - */ - PUTC('-'); } else { /* ** Unhandled or illegal value. Recover the @@ -2148,7 +2065,7 @@ top1: PUTC(FROMASCII((char)code)); } else { /* - ** Handle as named entity. - FM + ** Handle as named entity. - FM */ code -= 160; EntityName = HTMLGetEntityName(code); @@ -2230,7 +2147,7 @@ top1: /* ** Tag - */ + */ case S_tag: /* new tag */ if (unsign_c < 127 && (string->size ? isalnum((unsigned char)c) : isalpha((unsigned char)c))) { @@ -2311,8 +2228,8 @@ top1: */ } context->current_tag = t; - - /* + + /* ** Clear out attributes. */ { @@ -2322,7 +2239,7 @@ top1: } string->size = 0; context->current_attribute_number = INVALID; - + if (c == '>') { if (context->current_tag->name) start_element(context); @@ -2619,7 +2536,7 @@ top1: HTChunkPutc(string, c); context->state = S_attr; /* Get attribute */ break; - + /* accumulating value */ case S_attr: if (WHITE(c) || (c == '>') || (c == '=')) { /* End of word */ @@ -2637,7 +2554,7 @@ top1: HTChunkPutc(string, c); } break; - + case S_attr_gap: /* Expecting attribute or '=' or '>' */ if (WHITE(c)) break; /* Gap after attribute */ @@ -2653,8 +2570,8 @@ top1: HTChunkPutc(string, c); context->state = S_attr; /* Get next attribute */ break; - - case S_equals: /* After attr = */ + + case S_equals: /* After attr = */ if (WHITE(c)) break; /* Before attribute value */ if (c == '>') { /* End of tag */ @@ -2664,7 +2581,7 @@ top1: start_element(context); context->state = S_text; break; - + } else if (c == '\'') { context->state = S_squoted; break; @@ -2676,7 +2593,7 @@ top1: HTChunkPutc(string, c); context->state = S_value; break; - + case S_value: if (WHITE(c) || (c == '>')) { /* End of word */ HTChunkTerminate(string) ; @@ -2712,7 +2629,7 @@ top1: HTChunkPutc(string, c); } break; - + case S_squoted: /* Quoted attribute value */ if (c == '\'') { /* End of attribute value */ HTChunkTerminate(string) ; @@ -2749,7 +2666,7 @@ top1: HTChunkPutc(string, c); } break; - + case S_dquoted: /* Quoted attribute value */ if (c == '"' || /* Valid end of attribute value */ (soft_dquotes && /* If emulating old Netscape bug, treat '>' */ @@ -2790,7 +2707,7 @@ top1: HTChunkPutc(string, c); } break; - + case S_end: /* </ */ if (unsign_c < 127 && isalnum((unsigned char)c)) { HTChunkPutc(string, c); @@ -2806,7 +2723,7 @@ top1: } if (!t || t == context->unknown_tag) { if (TRACE) - fprintf(stderr, "Unknown end tag </%s>\n", string->data); + fprintf(stderr, "Unknown end tag </%s>\n", string->data); } else { BOOL tag_OK = (c == '>' || WHITE(c)); context->current_tag = t; @@ -3178,15 +3095,15 @@ PRIVATE void SGML_write ARGS3( /* Structured Object Class ** ----------------------- */ -PUBLIC CONST HTStreamClass SGMLParser = -{ +PUBLIC CONST HTStreamClass SGMLParser = +{ "SGMLParser", SGML_free, SGML_abort, - SGML_character, + SGML_character, SGML_string, SGML_write, -}; +}; /* Create SGML Engine ** ------------------ @@ -3217,7 +3134,7 @@ PUBLIC HTStream* SGML_new ARGS3( context->state = S_text; context->element_stack = 0; /* empty */ context->inSELECT = FALSE; -#ifdef CALLERDATA +#ifdef CALLERDATA context->callerData = (void*) callerData; #endif /* CALLERDATA */ for (i = 0; i < MAX_ATTRIBUTES; i++) @@ -3270,15 +3187,15 @@ PUBLIC HTStream* SGML_new ARGS3( //////////////////////////////////////////////////////////////////////// Copyright (c) 1993 Electrotechnical Laboratry (ETL) -Permission to use, copy, modify, and distribute this material -for any purpose and without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies, and that the name of ETL not be -used in advertising or publicity pertaining to this -material without the specific, prior written permission +Permission to use, copy, modify, and distribute this material +for any purpose and without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies, and that the name of ETL not be +used in advertising or publicity pertaining to this +material without the specific, prior written permission of an authorized representative of ETL. -ETL MAKES NO REPRESENTATIONS ABOUT THE ACCURACY OR SUITABILITY -OF THIS MATERIAL FOR ANY PURPOSE. IT IS PROVIDED "AS IS", +ETL MAKES NO REPRESENTATIONS ABOUT THE ACCURACY OR SUITABILITY +OF THIS MATERIAL FOR ANY PURPOSE. IT IS PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. ///////////////////////////////////////////////////////////////////////// Content-Type: program/C; charset=US-ASCII @@ -3298,7 +3215,7 @@ PUBLIC void JISx0201TO0208_EUC ARGS4( register unsigned char *, OHI, register unsigned char *, OLO) { - static char *table[] = { + static char *table[] = { "\xA1\xA3", "\xA1\xD6", "\xA1\xD7", "\xA1\xA2", "\xA1\xA6", "\xA5\xF2", "\xA5\xA1", "\xA5\xA3", "\xA5\xA5", "\xA5\xA7", "\xA5\xA9", "\xA5\xE3", "\xA5\xE5", "\xA5\xE7", "\xA5\xC3", "\xA1\xBC", diff --git a/WWW/Library/Implementation/SGML.h b/WWW/Library/Implementation/SGML.h index 30f0d170..5daafc73 100644 --- a/WWW/Library/Implementation/SGML.h +++ b/WWW/Library/Implementation/SGML.h @@ -141,9 +141,9 @@ typedef struct { HTTag * tags; /* Must be in strcmp order by name */ int number_of_tags; CONST char ** entity_names; /* Must be in strcmp order by name */ - int number_of_entities; + size_t number_of_entities; CONST UC_entity_info * extra_entity_info; /* strcmp order by name */ - int number_of_extra_entities; + size_t number_of_extra_entities; } SGML_dtd; diff --git a/WWW/Library/Implementation/UCAux.h b/WWW/Library/Implementation/UCAux.h index 5b2d52ce..b350e617 100644 --- a/WWW/Library/Implementation/UCAux.h +++ b/WWW/Library/Implementation/UCAux.h @@ -1,25 +1,9 @@ #ifndef UCAUX_H #define UCAUX_H -/* - * A type for a "Translation Quality" (actually, Transcoding Quality). - * This is a fuzzy concept since we are just looking at the charset - * not what characters are actually there, so it's just a guess for - * "common" cases. TQ_NO must be 0 since callers of functions that - * return this type may treat result as a boolean flag. - * The functions returning this type could be improved to use more - * knowledge from the translation tables. - */ -typedef enum { - TQ_NO = 0, /* must be 0 */ - TQ_POOR = 1, - TQ_GOOD = 2, - TQ_EXCELLENT = 3 -} UCTQ_t; - -extern UCTQ_t UCCanUniTranslateFrom PARAMS((int from)); -extern UCTQ_t UCCanTranslateUniTo PARAMS((int to)); -extern UCTQ_t UCCanTranslateFromTo PARAMS((int from, int to)); +extern BOOL UCCanUniTranslateFrom PARAMS((int from)); +extern BOOL UCCanTranslateUniTo PARAMS((int to)); +extern BOOL UCCanTranslateFromTo PARAMS((int from, int to)); extern BOOL UCNeedNotTranslate PARAMS(( int from, int to)); |