Exemplo n.º 1
0
static void asyncb_disconnect(struct connection *c,uint32_t reason)
{
    asynsock_t asysock = (asynsock_t)c->usr_ptr;
    if(asysock){
        if(asysock->c){
            release_conn(asysock->c);
            asysock->c = NULL;
        }
        else if(asysock->s != INVALID_SOCK){
            CloseSocket(asysock->s);
            asysock = INVALID_SOCK;
        }
        if(asysock->que){
            struct msg_connection *msg = calloc(1,sizeof(*msg));
            msg->base._ident = TO_IDENT(asysock->sident);
            msg->base.type = MSG_DISCONNECTED;
            msg->reason = reason;
            get_addr_remote(asysock->sident,msg->ip,32);
            get_port_remote(asysock->sident,&msg->port);
            if(0 != msgque_put_immeda(asysock->que,(lnode*)msg))
                free(msg);
        }
        asynsock_release(asysock);
    }else
    {
        printf("fatal error\n");
        exit(0);
    }
}
Exemplo n.º 2
0
void IoFinish(int32_t bytestransfer,st_io *io,uint32_t err_code)
{
    struct OVERLAPCONTEXT *OVERLAP = (struct OVERLAPCONTEXT *)io;
    struct connection *c = OVERLAP->c;
	acquire_conn(c);
    if(io == (st_io*)&c->send_overlap)
        SendFinish(bytestransfer,c,err_code);
    else if(io == (st_io*)&c->recv_overlap)
        RecvFinish(bytestransfer,c,err_code);
	release_conn(c);
}
Exemplo n.º 3
0
void luasock_destroy(void *ptr)
{
    _lsock_t sock = (_lsock_t)ptr;
    if(sock->c)
        release_conn(sock->c);
    else if(sock->s != INVALID_SOCK)
        CloseSocket(sock->s);
    //if(sock->sockobj) a problem here
    //    release_luaObj(sock->sockobj);
    free(sock);
    printf("luasocket_destroy\n");
}
Exemplo n.º 4
0
bool command::process(term & t)
{
	bool ret = false;
	term resp;
#ifdef PRINTCMD
	char * tmpbuf = print_term(command);
	REMOTE_LOG(DBG, "========================================\nCOMMAND : %s %s\n========================================\n",
		CMD_NAME_STR(ERL_INT_VALUE(cmd)),
		tmpbuf);
	delete tmpbuf;
#endif

	if(t.is_tuple() && t[1].is_integer()) {
        int cmd = t[1].v.i;
		resp.tuple();
		resp.add(t[0]);
		resp.insert().integer(cmd);
        if((t.length() - 1) != (size_t)CMD_ARGS_COUNT(cmd)) {
			term & _t = resp.insert().tuple();
	    	_t.insert().atom("error");
	    	_t.insert().atom("badarg");
	    	if(resp.is_undef())
                REMOTE_LOG(ERR, "ERROR badarg %s expected %d, got %d\n", CMD_NAME_STR(cmd)
                    , CMD_ARGS_COUNT(cmd), (t.length() - 1));
	        if(resp.is_undef()) REMOTE_LOG(CRT, "driver error: no resp generated, shutting down port\n");
            vector<unsigned char> respv = tc.encode(resp);
            p.write_cmd(respv);
	    } else {
		    switch(cmd) {
            case RMOTE_MSG:	ret = change_log_flag(t, resp);	break;
            case GET_SESSN:	ret = get_session(t, resp);		break;
            case PUT_SESSN:	ret = release_conn(t, resp);	break;
		    case CMT_SESSN:	ret = commit(t, resp);			break;
            case RBK_SESSN:	ret = rollback(t, resp);		break;
            case CMD_DSCRB:	ret = describe(t, resp);		break;
            case PREP_STMT:	ret = prep_sql(t, resp);		break;
            case BIND_ARGS:	ret = bind_args(t, resp);		break;
            case EXEC_STMT:	ret = exec_stmt(t, resp);		break;
            case FTCH_ROWS:	ret = fetch_rows(t, resp);		break;
            case CLSE_STMT:	ret = close_stmt(t, resp);		break;
            case GET_LOBDA:	ret = get_lob_data(t, resp);	break;
            case CMD_ECHOT:	ret = echo(t, resp);			break;
		    case SESN_PING:	ret = ping(t, resp);			break;
            default:
		    	ret = true;
                break;
            }
        }
    }

	return ret;
}