diff options
Diffstat (limited to 'gnu/usr.bin/lynx/WWW/Library/Implementation/HTFinger.c')
| -rw-r--r-- | gnu/usr.bin/lynx/WWW/Library/Implementation/HTFinger.c | 231 |
1 files changed, 114 insertions, 117 deletions
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFinger.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFinger.c index 08d0932d112..7afb64b9eda 100644 --- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFinger.c +++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFinger.c @@ -1,29 +1,29 @@ /* FINGER ACCESS HTFinger.c -** ============= -** Authors: -** ARB Andrew Brooks -** -** History: -** 21 Apr 94 First version (ARB, from HTNews.c by TBL) -** 12 Mar 96 Made the URL and command buffering secure from -** stack modifications, beautified the HTLoadFinger() -** and response() functions, and added support for the -** following URL formats for sending a "", "/w", -** "username[@host]", or "/w username[@host]" command -** to the server: -** finger://host -** finger://host/ -** finger://host/%2fw -** finger://host/%2fw%20username[@host] -** finger://host/w/username[@host] -** finger://host/username[@host] -** finger://host/username[@host]/w -** finger://username@host -** finger://username@host/ -** finger://username@host/w -** 15 Mar 96 Added support for port 79 gtype 0 gopher URLs -** relayed from HTLoadGopher. - FM -*/ + * ============= + * Authors: + * ARB Andrew Brooks + * + * History: + * 21 Apr 94 First version (ARB, from HTNews.c by TBL) + * 12 Mar 96 Made the URL and command buffering secure from + * stack modifications, beautified the HTLoadFinger() + * and response() functions, and added support for the + * following URL formats for sending a "", "/w", + * "username[@host]", or "/w username[@host]" command + * to the server: + * finger://host + * finger://host/ + * finger://host/%2fw + * finger://host/%2fw%20username[@host] + * finger://host/w/username[@host] + * finger://host/username[@host] + * finger://host/username[@host]/w + * finger://username@host + * finger://username@host/ + * finger://username@host/w + * 15 Mar 96 Added support for port 79 gtype 0 gopher URLs + * relayed from HTLoadGopher. - FM + */ #include <HTUtils.h> @@ -50,101 +50,97 @@ #define FREE_TARGET (*targetClass._free)(target) #define NEXT_CHAR HTGetCharacter() - /* Module-wide variables */ -PRIVATE int finger_fd; /* Socket for FingerHost */ +static int finger_fd; /* Socket for FingerHost */ struct _HTStructured { - CONST HTStructuredClass * isa; /* For gopher streams */ - /* ... */ + const HTStructuredClass *isa; /* For gopher streams */ + /* ... */ }; -PRIVATE HTStructured * target; /* The output sink */ -PRIVATE HTStructuredClass targetClass; /* Copy of fn addresses */ +static HTStructured *target; /* The output sink */ +static HTStructuredClass targetClass; /* Copy of fn addresses */ /* Initialisation for this module -** ------------------------------ -*/ -PRIVATE BOOL initialized = NO; -PRIVATE BOOL initialize NOARGS + * ------------------------------ + */ +static BOOL initialized = NO; +static BOOL initialize(void) { - finger_fd = -1; /* Disconnected */ - return YES; + finger_fd = -1; /* Disconnected */ + return YES; } - - /* Start anchor element -** -------------------- -*/ -PRIVATE void start_anchor ARGS1(CONST char *, href) + * -------------------- + */ +static void start_anchor(const char *href) { - BOOL present[HTML_A_ATTRIBUTES]; - CONST char* value[HTML_A_ATTRIBUTES]; + BOOL present[HTML_A_ATTRIBUTES]; + const char *value[HTML_A_ATTRIBUTES]; { int i; - for(i=0; i<HTML_A_ATTRIBUTES; i++) - present[i] = (BOOL) (i==HTML_A_HREF); + + for (i = 0; i < HTML_A_ATTRIBUTES; i++) + present[i] = (BOOL) (i == HTML_A_HREF); } - ((CONST char **)value)[HTML_A_HREF] = href; - (*targetClass.start_element)(target, HTML_A, present, - (CONST char **)value, -1, 0); + ((const char **) value)[HTML_A_HREF] = href; + (*targetClass.start_element) (target, HTML_A, present, + (const char **) value, -1, 0); } /* Send Finger Command line to remote host & Check Response -** -------------------------------------------------------- -** -** On entry, -** command points to the command to be sent, including CRLF, or is null -** pointer if no command to be sent. -** On exit, -** Negative status indicates transmission error, socket closed. -** Positive status is a Finger status. -*/ - - -PRIVATE int response ARGS5( - char *, command, - char *, sitename, - HTParentAnchor *, anAnchor, - HTFormat, format_out, - HTStream*, sink) + * -------------------------------------------------------- + * + * On entry, + * command points to the command to be sent, including CRLF, or is null + * pointer if no command to be sent. + * On exit, + * Negative status indicates transmission error, socket closed. + * Positive status is a Finger status. + */ + +static int response(char *command, + char *sitename, + HTParentAnchor *anAnchor, + HTFormat format_out, + HTStream *sink) { int status; int length = strlen(command); int ch, i; - char line[BIG], *l, *cmd=NULL; - char *p = line, *href=NULL; + char line[BIG], *l, *cmd = NULL; + char *p = line, *href = NULL; if (length == 0) - return(-1); + return (-1); /* Set up buffering. - */ + */ HTInitInput(finger_fd); /* Send the command. - */ + */ CTRACE((tfp, "HTFinger command to be sent: %s", command)); - status = NETWRITE(finger_fd, (char *)command, length); + status = NETWRITE(finger_fd, (char *) command, length); if (status < 0) { CTRACE((tfp, "HTFinger: Unable to send command. Disconnecting.\n")); NETCLOSE(finger_fd); finger_fd = -1; return status; - } /* if bad status */ - + } + /* if bad status */ /* Make a hypertext object with an anchor list. - */ + */ target = HTML_new(anAnchor, format_out, sink); targetClass = *target->isa; /* Copy routine entry points */ /* Create the results report. - */ - CTRACE((tfp,"HTFinger: Reading finger information\n")); + */ + CTRACE((tfp, "HTFinger: Reading finger information\n")); START(HTML_HTML); PUTC('\n'); START(HTML_HEAD); @@ -182,17 +178,18 @@ PRIVATE int response ARGS5( PUTC('\n'); START(HTML_PRE); - while ((ch=NEXT_CHAR) != EOF) { + while ((ch = NEXT_CHAR) != EOF) { if (interrupted_in_htgetcharacter) { - CTRACE((tfp, "HTFinger: Interrupted in HTGetCharacter, apparently.\n")); - _HTProgress (CONNECTION_INTERRUPTED); + CTRACE((tfp, + "HTFinger: Interrupted in HTGetCharacter, apparently.\n")); + _HTProgress(CONNECTION_INTERRUPTED); goto end_html; } if (ch != LF) { - *p = (char) ch; /* Put character in line */ - if (p < &line[BIG-1]) { + *p = (char) ch; /* Put character in line */ + if (p < &line[BIG - 1]) { p++; } } else { @@ -235,7 +232,7 @@ PRIVATE int response ARGS5( NETCLOSE(finger_fd); finger_fd = -1; -end_html: + end_html: END(HTML_PRE); PUTC('\n'); END(HTML_BODY); @@ -243,48 +240,46 @@ end_html: END(HTML_HTML); PUTC('\n'); FREE_TARGET; - return(0); + return (0); } - /* Load by name HTLoadFinger -** ============ -*/ -PUBLIC int HTLoadFinger ARGS4( - CONST char *, arg, - HTParentAnchor *, anAnchor, - HTFormat, format_out, - HTStream*, stream) + * ============ + */ +int HTLoadFinger(const char *arg, + HTParentAnchor *anAnchor, + HTFormat format_out, + HTStream *stream) { char *username, *sitename, *colon; /* Fields extracted from URL */ - char *slash, *at_sign; /* Fields extracted from URL */ + char *slash, *at_sign; /* Fields extracted from URL */ char *command, *str, *param; /* Buffers */ - int port; /* Port number from URL */ - int status; /* tcp return */ + int port; /* Port number from URL */ + int status; /* tcp return */ int result = HT_LOADED; BOOL IsGopherURL = FALSE; - CONST char * p1 = arg; + const char *p1 = arg; CTRACE((tfp, "HTFinger: Looking for %s\n", (arg ? arg : "NULL"))); if (!(arg && *arg)) { HTAlert(COULD_NOT_LOAD_DATA); - return HT_NOT_LOADED; /* Ignore if no name */ + return HT_NOT_LOADED; /* Ignore if no name */ } if (!initialized) initialized = initialize(); if (!initialized) { - HTAlert (gettext("Could not set up finger connection.")); + HTAlert(gettext("Could not set up finger connection.")); return HT_NOT_LOADED; /* FAIL */ } /* Set up the host and command fields. - */ + */ if (!strncasecomp(arg, "finger://", 9)) { - p1 = arg + 9; /* Skip "finger://" prefix */ + p1 = arg + 9; /* Skip "finger://" prefix */ } else if (!strncasecomp(arg, "gopher://", 9)) { - p1 = arg + 9; /* Skip "gopher://" prefix */ + p1 = arg + 9; /* Skip "gopher://" prefix */ IsGopherURL = TRUE; } @@ -323,7 +318,7 @@ PUBLIC int HTLoadFinger ARGS4( if (*sitename == '\0') { HTAlert(gettext("Could not load data (no sitename in finger URL)")); - result = HT_NOT_LOADED; /* Ignore if no name */ + result = HT_NOT_LOADED; /* Ignore if no name */ } else if ((colon = strchr(sitename, ':')) != NULL) { *colon++ = '\0'; port = atoi(colon); @@ -335,12 +330,12 @@ PUBLIC int HTLoadFinger ARGS4( if (result == HT_LOADED) { /* Load the string for making a connection/ - */ + */ str = 0; HTSprintf0(&str, "lose://%s/", sitename); /* Load the command for the finger server. - */ + */ command = 0; if (at_sign && slash) { if (*slash == 'w' || *slash == 'W') { @@ -351,20 +346,20 @@ PUBLIC int HTLoadFinger ARGS4( } else if (at_sign) { HTSprintf0(&command, "%s%c%c", username, CR, LF); } else if (*username == '/') { - if ((slash = strchr((username+1), '/')) != NULL) { + if ((slash = strchr((username + 1), '/')) != NULL) { *slash = ' '; } HTSprintf0(&command, "%s%c%c", username, CR, LF); } else if ((*username == 'w' || *username == 'W') && - *(username+1) == '/') { - if (*username+2 != '\0') { - *(username+1) = ' '; + *(username + 1) == '/') { + if (*username + 2 != '\0') { + *(username + 1) = ' '; } else { - *(username+1) = '\0'; + *(username + 1) = '\0'; } HTSprintf0(&command, "/%s%c%c", username, CR, LF); } else if ((*username == 'w' || *username == 'W') && - *(username+1) == '\0') { + *(username + 1) == '\0') { HTSprintf0(&command, "/%s%c%c", username, CR, LF); } else if ((slash = strchr(username, '/')) != NULL) { *slash++ = '\0'; @@ -378,16 +373,17 @@ PUBLIC int HTLoadFinger ARGS4( } /* Now, let's get a stream setup up from the FingerHost: - ** CONNECTING to finger host - */ + * CONNECTING to finger host + */ CTRACE((tfp, "HTFinger: doing HTDoConnect on '%s'\n", str)); status = HTDoConnect(str, "finger", FINGER_PORT, &finger_fd); CTRACE((tfp, "HTFinger: Done DoConnect; status %d\n", status)); if (status == HT_INTERRUPTED) { /* Interrupt cleanly */ - CTRACE((tfp, "HTFinger: Interrupted on connect; recovering cleanly.\n")); - HTProgress (CONNECTION_INTERRUPTED); + CTRACE((tfp, + "HTFinger: Interrupted on connect; recovering cleanly.\n")); + HTProgress(CONNECTION_INTERRUPTED); result = HT_NOT_LOADED; } else if (status < 0) { NETCLOSE(finger_fd); @@ -399,7 +395,7 @@ PUBLIC int HTLoadFinger ARGS4( CTRACE((tfp, "HTFinger: Connected to finger host '%s'.\n", str)); /* Send the command, and process response if successful. - */ + */ if (response(command, sitename, anAnchor, format_out, stream) != 0) { HTAlert(gettext("No response from finger server.")); result = HT_NOT_LOADED; @@ -414,9 +410,10 @@ PUBLIC int HTLoadFinger ARGS4( #ifdef GLOBALDEF_IS_MACRO #define _HTFINGER_C_1_INIT { "finger", HTLoadFinger, NULL } -GLOBALDEF (HTProtocol, HTFinger, _HTFINGER_C_1_INIT); +GLOBALDEF(HTProtocol, HTFinger, _HTFINGER_C_1_INIT); #else -GLOBALDEF PUBLIC HTProtocol HTFinger = { "finger", HTLoadFinger, NULL }; +GLOBALDEF HTProtocol HTFinger = +{"finger", HTLoadFinger, NULL}; #endif /* GLOBALDEF_IS_MACRO */ #endif /* not DISABLE_FINGER */ |
