about summary refs log tree commit diff stats
path: root/WWW/Library/Implementation/HTTCP.h
blob: abbc956f8538f3e6cebc6828e4446e416a807737 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*                               /Net/dxcern/userd/timbl/hypertext/WWW/Library/src/HTTCP.html
                               GENERIC TCP/IP COMMUNICATION

   This module has the common code for handling TCP/IP connections etc.

 */
#ifndef HTTCP_H
#define HTTCP_H

#ifndef HTUTILS_H
#include <HTUtils.h>
#endif

#ifdef __cplusplus
extern "C" {
#endif
/*      Produce a string for an internet address
 *      ---------------------------------------
 *
 * On exit:
 *           returns a pointer to a static string which must be copied if
 *                it is to be kept.
 */
#ifdef INET6
    extern const char *HTInetString(SockA * mysin);

#else
    extern const char *HTInetString(struct sockaddr_in *mysin);
#endif				/* INET6 */

/*      Encode INET status (as in sys/errno.h)                    inet_status()
 *      ------------------
 *
 * On entry:
 *              where gives a description of what caused the error
 *      global errno gives the error number in the unix way.
 *
 * On return:
 *      returns a negative status in the unix way.
 */
    extern int HTInetStatus(const char *where);

/*      Publicly accessible variables
*/
/* extern struct sockaddr_in HTHostAddress; */
    /* The internet address of the host */
    /* Valid after call to HTHostName() */

/*      Parse a cardinal value                                 parse_cardinal()
 *      ----------------------
 *
 * On entry:
 *      *pp points to first character to be interpreted, terminated by
 *      non 0..9 character.
 *      *pstatus points to status already valid,
 *      maxvalue gives the largest allowable value.
 *
 * On exit:
 *      *pp points to first unread character,
 *      *pstatus points to status updated iff bad
 */

    extern unsigned int HTCardinal(int *pstatus,
				   char **pp,
				   unsigned int max_value);

/*	Check whether string is a valid Internet hostname
 *	-------------------------------------------------
 */

    extern BOOL valid_hostname(char *name);

/*	Resolve an internet hostname, like gethostbyname
 *	------------------------------------------------
 *
 *  On entry,
 *	str	points to the given host name, not numeric address,
 *		without colon or port number.
 *
 *  On exit,
 *	returns a pointer to a struct hostent in static storage,
 *	or NULL in case of error or user interruption.
 *
 *  The interface is intended to be the same as for gethostbyname(),
 *  but additional status is returned in lynx_nsl_status.
 */
    extern int lynx_nsl_status;

    extern struct hostent *LYGetHostByName(char *str);

/*      Get Name of This Machine
 *      ------------------------
 *
 */

    extern const char *HTHostName(void);

    extern int HTDoConnect(const char *url,
			   const char *protocol,
			   int default_port,
			   int *s);

    extern int HTDoRead(int fildes,
			void *buf,
			unsigned nbyte);

#ifdef __cplusplus
}
#endif
#endif				/* HTTCP_H */
n class="n">L, "__index"); lua_gettable(L, -2); if (!lua_istable(L, -1)) goto error; lua_pushstring(L, "class"); lua_gettable(L, -2); if (!lua_isstring(L, -1)) goto error; sprintf(buf, "%p", lua_touserdata(L, 1)); lua_pushfstring(L, "%s: %s", lua_tostring(L, -1), buf); return 1; error: lua_pushstring(L, "invalid object passed to 'auxiliar.c:__tostring'"); lua_error(L); return 1; } /*-------------------------------------------------------------------------*\ * Insert class into group \*-------------------------------------------------------------------------*/ void auxiliar_add2group(lua_State *L, const char *classname, const char *groupname) { luaL_getmetatable(L, classname); lua_pushstring(L, groupname); lua_pushboolean(L, 1); lua_rawset(L, -3); lua_pop(L, 1); } /*-------------------------------------------------------------------------*\ * Make sure argument is a boolean \*-------------------------------------------------------------------------*/ int auxiliar_checkboolean(lua_State *L, int objidx) { if (!lua_isboolean(L, objidx)) auxiliar_typeerror(L, objidx, lua_typename(L, LUA_TBOOLEAN)); return lua_toboolean(L, objidx); } /*-------------------------------------------------------------------------*\ * Return userdata pointer if object belongs to a given class, abort with * error otherwise \*-------------------------------------------------------------------------*/ void *auxiliar_checkclass(lua_State *L, const char *classname, int objidx) { void *data = auxiliar_getclassudata(L, classname, objidx); if (!data) { char msg[45]; sprintf(msg, "%.35s expected", classname); luaL_argerror(L, objidx, msg); } return data; } /*-------------------------------------------------------------------------*\ * Return userdata pointer if object belongs to a given group, abort with * error otherwise \*-------------------------------------------------------------------------*/ void *auxiliar_checkgroup(lua_State *L, const char *groupname, int objidx) { void *data = auxiliar_getgroupudata(L, groupname, objidx); if (!data) { char msg[45]; sprintf(msg, "%.35s expected", groupname); luaL_argerror(L, objidx, msg); } return data; } /*-------------------------------------------------------------------------*\ * Set object class \*-------------------------------------------------------------------------*/ void auxiliar_setclass(lua_State *L, const char *classname, int objidx) { luaL_getmetatable(L, classname); if (objidx < 0) objidx--; lua_setmetatable(L, objidx); } /*-------------------------------------------------------------------------*\ * Get a userdata pointer if object belongs to a given group. Return NULL * otherwise \*-------------------------------------------------------------------------*/ void *auxiliar_getgroupudata(lua_State *L, const char *groupname, int objidx) { if (!lua_getmetatable(L, objidx)) return NULL; lua_pushstring(L, groupname); lua_rawget(L, -2); if (lua_isnil(L, -1)) { lua_pop(L, 2); return NULL; } else { lua_pop(L, 2); return lua_touserdata(L, objidx); } } /*-------------------------------------------------------------------------*\ * Get a userdata pointer if object belongs to a given class. Return NULL * otherwise \*-------------------------------------------------------------------------*/ void *auxiliar_getclassudata(lua_State *L, const char *classname, int objidx) { return luaL_testudata(L, objidx, classname); } /*-------------------------------------------------------------------------*\ * Throws error when argument does not have correct type. * Used to be part of lauxlib in Lua 5.1, was dropped from 5.2. \*-------------------------------------------------------------------------*/ int auxiliar_typeerror (lua_State *L, int narg, const char *tname) { const char *msg = lua_pushfstring(L, "%s expected, got %s", tname, luaL_typename(L, narg)); return luaL_argerror(L, narg, msg); }