示例#1
0
文件: strtbl.c 项目: rentzsch/woplat
strtbl *st_newWithString(const char *s)
{
    strtbl *st = NULL;
    char key[MAXSTR], value[MAXSTR];

    if ((s == NULL) || (*s != LEFTCURLY))
        return NULL;
    /*
     *	repeat over key = value pairs
     */
    s++;
    while (*s != RIGHTCURLY) {
        s = _getstr(s, key);
        while (*s && isspace((int)*s))	s++;
        if (*s == EQUAL)
            s = _getstr(s+1, value);

        if (*key && *value) {
            if (st == NULL)
                st = st_new(0);
            st_add(st, key, value, STR_COPYKEY|STR_COPYVALUE);
        }
        while (*s && (isspace((int)*s) || (*s == SEMI)))	s++;
    }

    return st;
}
示例#2
0
static int ml_aitvaras_init(lua_State* l) {
	checkargs(0, "aitvaras.init");

	invocation_cs = async_make_cs();
	mempool_init(&invocation_pool, sizeof(Invocation));

	cb_l = l;

	lua_getglobal(l, "aitvaras");	

	if(!_validate_conf(l)) 
		return luaL_error(l, "invalid configuration");

	const char* lobby_addr = _getstr(l, "lobby_addr");
	const char* server_addr = _getstr(l, "server_addr");
	char* enlist_req = alloca(strlen(lobby_addr) + strlen("/enlist") + 1);
	strcpy(enlist_req, lobby_addr);
	strcat(enlist_req, "/enlist");

	http_post(enlist_req, false, server_addr, NULL, _enlist_cb);

	aatree_init(&clients);

	const char* options[] = {
		"listening_ports", _getstr(l, "listening_port"),
		"document_root", _getstr(l, "document_root"),
		NULL
	};
	mg_ctx = mg_start(mg_callback, NULL, options);

	lua_pop(l, 1);

	return 0;
}
示例#3
0
char *InputBox ( /*bool bksave, int bkmax,*/ int max, /*char *bkfile*/ char *msg, char *init )
{
    unsigned char *p;
    unsigned char input[max += max == 0 ? 1025 : 1];
    int key, pos = _wstrlen(init), strpos;
    dispos = 0;
    curs_set(1);
    strcpy((char *)input, init);
    while(1)
    {
        _boxdis(msg, (char *)input, pos, max);
        switch (key = getch()) {
        case KEY_UP:
            break;
        case KEY_DOWN:
            input[0] = '\0';
            pos = 0;
            break;
        case KEY_LEFT:
            pos = MAX(0, pos - 1);
            break;
        case KEY_RIGHT:
            pos = MIN(_wstrlen((char *)input), pos + 1);
            break;
        case KEY_RESIZE:
            break;
        case 033:
            curs_set(0);
            return NULL;
        case '\n':
            curs_set(0);
            return _getstr((char *)input);
        case KEY_DC:
        case KEY_BACKSPACE:
        case 127:
            strpos = POS;
            strcpy((char *)&input[strpos == 0 ? 0 : _wstrpos((char *)input, pos - 1)], (char *)&input[strpos == 0 ? _wstrpos((char *)input, 1) : strpos]);
            pos -= pos != 0;
            break;
        default:
            if (key > 255 || key < 0) break;
            if (isascii(key) && (int)strlen((char *)input) > max - 2) break;
            if (!isascii(key) && (int)strlen((char *)input) > max - 3) {
                getch();
                break;
            }
            strpos = POS;
            p = malloc(strlen((char *)input) - strpos + 1);
            strcpy((char *)p, (char *)&input[strpos]);
            input[strpos] = key;
            if (!isascii(key))
                input[strpos + 1] = getch();
            pos++;
            strcpy((char *)&input[strpos + 1 + !isascii(key)], (char *)p);
            free(p);
        }
    }
}
示例#4
0
static int ml_aitvaras_close(lua_State* l) {
	checkargs(0, "aitvaras.close");

	lua_getglobal(l, "aitvaras");

	const char* lobby_addr = _getstr(l, "lobby_addr");
	const char* server_addr = _getstr(l, "server_addr");
	char* remove_req = alloca(strlen(lobby_addr) + strlen("/remove") + 1);
	strcpy(remove_req, lobby_addr);
	strcat(remove_req, "/remove");

	if(server_id != -1) http_post(remove_req, false, server_addr, NULL, _remove_cb);

	mg_stop(mg_ctx);

	aatree_free(&clients);

	// Since some invocations might still be live, append
	// cleanup task to the end of the queue
	async_schedule(_cleanup_invocations, 0, NULL); 

	return 0;
}
示例#5
0
文件: socks4.c 项目: Litew/nylonex
int
socks4_negotiate(int clisock, struct conndesc *conn)
{
	u_char data, *addr;
	char hostname[256];
	int ret;
	struct socks4_hdr hdr4;
	struct sockaddr_in rem_in;
	struct hostent *hent;

	/* This is already implied ... */
	hdr4.vn = SOCKS4_VN;

	ret = -1;

	/* Get the seven first bytes after version, until USERID */
	if (atomicio(read, clisock, &hdr4.cd, 7) != 7)
		return (-1);

	switch (hdr4.cd) {
	case SOCKS4_CD_CONNECT:
	case SOCKS4_CD_RESOLVE:
		/* We can only do connect & resolve. */
		break;
	default:
		warnxv(0, "Client attempted unsupported SOCKS4 command %d",
		    hdr4.cd);
		return (-1);
	};

	/* Eat the username; it is not used */
	while ((ret = atomicio(read, clisock, &data, 1)) == 1 && data != 0);

	if (ret != 1)
		return (-1);

	memset(&rem_in, 0, sizeof(rem_in));
	rem_in.sin_family = AF_INET;
	rem_in.sin_port = hdr4.destport;

    	addr = (unsigned char *)&hdr4.destaddr;
    	/* SOCKS4A or tor-resolve? */
 	if ((addr[0] == 0 && addr[1] == 0 && addr[2] == 0 && addr[3] != 0)
	    || (hdr4.cd == SOCKS4_CD_RESOLVE && hdr4.destport == 0)) {
		if (_getstr(clisock, hostname, sizeof(hostname)) < 0)
			return (-1);

		if ((hent = gethostbyname(hostname)) == NULL) {
			hdr4.cd = SOCKS4_REP_REJECT;
		} else {
			rem_in.sin_addr = *(struct in_addr *)hent->h_addr;
			/*
			 * Send back the resolved address as well, for
			 * tor-resolve.
			 */
			hdr4.destaddr = rem_in.sin_addr.s_addr;
		}
	} else {
		rem_in.sin_addr.s_addr = hdr4.destaddr;
	}

 	return (_socks4_tryconnect(clisock, &rem_in, &hdr4, conn));
}