コード例 #1
0
ファイル: userregsv.c プロジェクト: eleckis/fmtbenchmarks
/**
 * Service entry
 * @return SUCCEED/FAIL
 */
void USERREGSV (TPSVCINFO *p_svc)
{
    int ret = SUCCEED;
    int rsp = 0;
    Message_t msg;
    long len;
    char * buf = p_svc->data;

    memset(&msg, 0, sizeof(msg));
    
    /* allocate some stuff for more data to put in  */
    
    len = tptypes(p_svc->data, NULL, NULL) + 1024;
    
    if (NULL==(buf = tprealloc(buf, len)))
    {
	TP_LOG(log_error, "Failed reallocate buffer to size %d: %s", 
                len, tpstrerror(tperrno));
	ret=FAIL;
	goto out;
    }

    if (SUCCEED != parse_msg(&msg, buf, len))
    {
	TP_LOG(log_error, "Failed to parse msg");
	ret=FAIL;
	goto out;
	    
    }
    
    msg.rsp.rspstatus = 100;
    strcpy(msg.rsp.rsprspmsg, "User successfully registered");
    
    if(SUCCEED != msg_build(&msg, &buf, &len))
    {
	TP_LOG(log_error, "Failed to build msg");
	ret=FAIL;
	goto out;
    }

out:

    tpreturn(  ret==SUCCEED?TPSUCCESS:TPFAIL,
            0L,
            buf,
            0L,
            0L);


}
コード例 #2
0
int main(int argc, char **argv) {
	int tpstatus;
	char *retbuf;
	char type[20];
	char subtype[20];
	long retbufsize;
	char *sbuf;
	long sbufsize;
	long callflags;
	int i;

	for (i = 0; i < 10; i++) {
		callflags = 0L;
		sbufsize = 29;
		sbuf = tpalloc("X_OCTET", 0, sbufsize);
		memset(sbuf, 0, sbufsize);
		strcpy(sbuf, "THIS IS YOUR CLIENT SPEAKING");
		retbufsize = 15;
		retbuf = tpalloc("X_OCTET", 0, retbufsize);
		memset(retbuf, 0, retbufsize);

		// tptypes
		tptypes(sbuf, type, subtype);

		// tpcall
		btlogger((char*) "Calling tpcall with input: %s", sbuf);
		tpstatus = tpcall("FOOAPP", sbuf, sbufsize, (char **) &retbuf,
				&retbufsize, callflags);
		btlogger(
				(char*) "Called tpcall with length: %d output: %s and status: %d and tperrno: %d",
				retbufsize, retbuf, tpstatus, tperrno);

		if (tpstatus == -1 && tperrno == TPENOENT) {
			tpfree(sbuf);
			tpfree(retbuf);

			return -1;
		}

		tpfree(sbuf);
		tpfree(retbuf);
	}
	return 0;
}
コード例 #3
0
ファイル: tpserver.c プロジェクト: openhoodie/hoodie
static void Iowait(void)
{
	int maxfd;
	fd_set readfds;
	QUEUE *q;

	/* accept input on any descriptor */
	FD_ZERO(&readfds);
	FD_SET(master, &readfds);
	maxfd = master;
	for (q = QFIRST(tpclients); q != &tpclients; q = QNEXT(q))
	{
		struct tpclient * c = OFFSET(q, struct tpclient, global);
		if (c->fd > maxfd) maxfd = c->fd;
		FD_SET(c->fd, &readfds);
	}

debug(3, "entering select to fd %d", maxfd);
	/* wait for something to do */
	if (select(maxfd + 1, &readfds, 0, 0, 0) == -1)
	{
		error("select: %m");
		return;
	}

	/* new client connection */
	if (FD_ISSET(master, &readfds))
	{
debug(1, "new connection");
		int i = accept(master, 0, 0);
		if (i == -1)
			error("accept: %m");
		else
			svr_next_command(new_client(i));
	}

	q = QFIRST(tpclients);
	while (q != &tpclients)
	{
		struct tpclient * c = OFFSET(q, struct tpclient, global);
		q = QNEXT(q);
		if (FD_ISSET(c->fd, &readfds))
		{
			long bufsize = c->input ? tptypes(c->input, 0, 0) : 0;
			int used = c->used;
			if (used >= bufsize)	// something unexpected.  could be EOF
			{
				char check_eof[100];
				int len = read(c->fd, &check_eof, sizeof check_eof);
				if (len > 0)
				{
					error("Iowait: read %d unexpected bytes from fd %d", len, c->fd);
					dump(c->fd, "unexpected", check_eof, len);
				}
				del_client(c);
			}
			else if ((used = read(c->fd, c->input + used, bufsize - used)) == -1)
			{
				error("Iowait: read: %m");
				del_client(c);
			}
			else if (used == 0)
			{
				debug(1, "eof on %d", c->fd);
				del_client(c);
			}
			else if ((c->used = c->used + used) == bufsize)
			{
				void (*handle)(struct tpclient *, char *) = c->handler;
				char *buf = c->input;
				char *handler_name = c->handler_name;
				c->handler_name = 0;
				c->handler = 0;
				c->input = 0;
				c->used = 0;
				debug(1, "%d bytes read from %d.  calling handler %s at 0x%x", bufsize, c->fd, handler_name, handle);
				if (DEBUG > 2) dump(c->fd, "read", buf, bufsize);
				handle(c, buf);
				debug(2, "back from handler %s at 0x%x", handler_name, handle);
			}
			else
				debug(2, "%d bytes read from %d.  waiting for %d more...", used, c->fd, bufsize - c->used);
		}
if (q != &tpclients) debug(2, "-------");
	}
}