Ejemplo n.º 1
0
int apoCli_recv(char *bufferFram, int bufsize, int timeOutMS)
{
	ApoClient *apoCli = ApoClient::getInstant();
	if (!apoCli)	{
		return -1;
	}
	nd_handle h = apoCli->getConn();
	if (!h) {
		nd_logerror("can not RECV data, MUST connected\n") ;
		return -1;
	}

	if (!apoCli->IsInConnect())	{
		nd_logerror("can not RECV data, MUST LOGIN \n") ;
		nd_object_seterror(h, NDSYS_ERR_NEED_LOGIN);
		return -1;
	}

	int ret = nd_connector_waitmsg(h, (nd_packetbuf_t*)bufferFram, timeOutMS);
	if (ret > bufsize) {
		nd_object_seterror(h, NDSYS_ERR_INVALID_INPUT);
		return -1;
	}
	else if (ret > 0) {
		apoCli->trytoHandle((nd_usermsgbuf_t *)bufferFram);
	}
	return ret;
}
Ejemplo n.º 2
0
//回复对方的连接请求
// 返回-1 出错,0 succes
int _handle_syn(nd_udt_node *socket_node,struct ndudt_pocket *pocket)
{
	if(socket_node->status==NETSTAT_LISTEN) {
		struct ndudt_pocket syn_ack ;		
		init_udt_pocket(&syn_ack) ;
		SET_SYN(&syn_ack) ;

		socket_node->acknowledged_seq = socket_node->send_sequence ;
		socket_node->received_sequence = pocket->sequence + 1;		//接受到对方的系列号+1以便回复对方
		
		set_pocket_ack(&syn_ack,socket_node->received_sequence) ;
		syn_ack.sequence = socket_node->send_sequence ;
		write_pocket_to_socket(socket_node, &syn_ack, ndt_header_size(&syn_ack));
		socket_node->status = NETSTAT_SYNRECV ;
		return 0 ;
	}

	else if(NETSTAT_SYNSEND==socket_node->status){
		//connect (client side received syn ack
		if(!pocket->header.ack || socket_node->send_sequence+1!=pocket->ack_seq) {
			nd_object_seterror((nd_handle)socket_node,NDERR_BADPACKET);
			nd_assert(0) ;
			return -1;
		}
		socket_node->session_id = pocket->session_id ;
		socket_node->received_sequence = pocket->sequence +1 ;
		socket_node->acknowledged_seq = pocket->ack_seq ;		
		
		socket_node->status = NETSTAT_ESTABLISHED;
		++ (socket_node->send_sequence) ;
		udt_send_ack(socket_node) ;
		return 0 ;
	}
	
	else if(socket_node->status < NETSTAT_ACCEPT){
		
		nd_assert(socket_node->received_sequence == pocket->sequence + 1) ;
		if(socket_node->received_sequence == pocket->sequence + 1) {
			udt_send_ack(socket_node) ;
			return 0 ;
		}
		return -1 ;
	}
	else {
		nd_object_seterror((nd_handle)socket_node,NDERR_BADPACKET);
		return -1;
	}
}
Ejemplo n.º 3
0
/* install message handle*/
int nd_msgentry_install(nd_netui_handle handle, nd_usermsg_func func, ndmsgid_t maxid, ndmsgid_t minid,int level, const char *name) 
{
	struct nd_msg_entry_node * node ;
	int ret = -1;
	ENTER_FUNC() ;
	
	node = _nd_msgentry_get_node(handle,   maxid,  minid) ;
	if (node) {	
		if (node->is_script && node->entry)	{
			free(node->entry);
		}
		node->entry = func ;
		node->level = level ;
		node->is_script = 0;
#if 1
		if (name && name[0]) {
			int len = (int)ndstrlen(name) + 1;
			if (len > (int) sizeof(node->name)) {
				len = sizeof(node->name);
			}
			ndstrncpy(node->name, name, len);
		}
#endif
		ret = 0 ;
	}
	else {
		nd_object_seterror(handle, NDERR_NOSOURCE) ;
	}
	
	LEAVE_FUNC();	
	return  ret ;

}
Ejemplo n.º 4
0
int ndSendAndWaitMessage(nd_handle nethandle, nd_usermsgbuf_t *sendBuf, nd_usermsgbuf_t* recvBuf, ndmsgid_t waitMaxid, ndmsgid_t waitMinid, int sendFlag, int timeout)
{
	if (nd_connector_send(nethandle, (nd_packhdr_t*)sendBuf, sendFlag) <= 0) {
		nd_object_seterror(nethandle, NDERR_WRITE);
		nd_logerror("send data error: NDERR_WRITE\n");
		return -1;
	}
	ndtime_t start_tm = nd_time();
RE_RECV:

	if (-1 == nd_connector_waitmsg(nethandle, (nd_packetbuf_t *)recvBuf, timeout)) {
		nd_object_seterror(nethandle, NDERR_TIMEOUT);
		nd_logerror("wait message timeout\n");
		return -1;
	}
	else if (recvBuf->msg_hdr.packet_hdr.ndsys_msg){
		if (-1 == nd_net_sysmsg_hander((nd_netui_handle)nethandle, (nd_sysresv_pack_t *)recvBuf)){
			nd_logerror("receive system mesaage and handler error \n");
			return -1;
		}
	}
	else if (nd_checkErrorMsg(nethandle, (struct ndMsgData*)recvBuf)) {
		nd_logerror("receive error message \n");
		return -1;
	}
	else if (ND_USERMSG_MAXID(recvBuf) != waitMaxid || ND_USERMSG_MINID(recvBuf) != waitMinid) {
		if ((nd_time() - start_tm) >= timeout) {
			nd_object_seterror(nethandle, NDERR_TIMEOUT);
			nd_logerror("wait message(%d,%d) timeout\n", waitMaxid, waitMinid);
			return -1;
		}
		if (((nd_netui_handle)nethandle)->msg_handle) {
			//int ret = nd_translate_message(nethandle, (nd_packhdr_t*)recvBuf, NULL);
			int ret = _packet_handler((nd_netui_handle)nethandle, &recvBuf->msg_hdr.packet_hdr, NULL);
			if (ret == -1){
				nd_logerror("wait message(%d,%d) error ,recvd(%d,%d)\n", waitMaxid, waitMinid, ND_USERMSG_MAXID(recvBuf), ND_USERMSG_MINID(recvBuf));
				return ret;
			}
		}
		goto RE_RECV;
	}
	return 0;
}
Ejemplo n.º 5
0
int ndWaitMsg(netObject netObj, char *buf, int bufsize, int timeOutMS)
{
    int ret = nd_connector_waitmsg(netObj, (nd_packetbuf_t *)buf,timeOutMS);
	
	if (-1==ret ) {
		if (NDERR_WOULD_BLOCK != nd_object_lasterror((nd_handle)netObj) &&
			NDERR_TIMEOUT != nd_object_lasterror((nd_handle) netObj) &&
			NDERR_INVALID_INPUT != nd_object_lasterror((nd_handle) netObj) ) {
			tryto_terminate(netObj) ;
		}		
	}
	else if (ret > bufsize) {
		nd_object_seterror(netObj,NDERR_LIMITED);
		return -1;
	}

	return ret ;
}
Ejemplo n.º 6
0
int nd_msgentry_script_install(nd_handle handle, const char*script, ndmsgid_t maxid, ndmsgid_t minid, int level)
{
	struct nd_msg_entry_node * node;
	int ret = -1;
	ENTER_FUNC();
	node = _nd_msgentry_get_node(handle, maxid, minid);
	if (script && script[0] && node) {
		int len = (int)ndstrlen(script) + 1;
		if (node->is_script && node->entry)	{
			free(node->entry);
		}
		node->entry = (nd_usermsg_func)malloc(len);
		ndstrncpy((char*)node->entry, script, len);
		node->level = level;
		node->is_script = 1;
		ret = 0;
	}
	else {
		nd_object_seterror(handle, NDERR_NOSOURCE);
	}

	LEAVE_FUNC();
	return  ret;
}