int rpc_client_new(rdpRpc* rpc) { RpcClient* client = NULL; client = (RpcClient*) malloc(sizeof(RpcClient)); if (client) { client->Thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) rpc_client_thread, rpc, CREATE_SUSPENDED, NULL); client->StopEvent = CreateEvent(NULL, TRUE, FALSE, NULL); client->PduSentEvent = CreateEvent(NULL, TRUE, FALSE, NULL); client->SendQueue = Queue_New(TRUE, -1, -1); Queue_Object(client->SendQueue)->fnObjectFree = (OBJECT_FREE_FN) rpc_pdu_free; client->pdu = NULL; client->ReceivePool = Queue_New(TRUE, -1, -1); client->ReceiveQueue = Queue_New(TRUE, -1, -1); Queue_Object(client->ReceivePool)->fnObjectFree = (OBJECT_FREE_FN) rpc_pdu_free; Queue_Object(client->ReceiveQueue)->fnObjectFree = (OBJECT_FREE_FN) rpc_pdu_free; client->RecvFrag = NULL; client->FragmentPool = Queue_New(TRUE, -1, -1); client->FragmentQueue = Queue_New(TRUE, -1, -1); Queue_Object(client->FragmentPool)->fnObjectFree = (OBJECT_FREE_FN) rpc_fragment_free; Queue_Object(client->FragmentQueue)->fnObjectFree = (OBJECT_FREE_FN) rpc_fragment_free; client->ClientCallList = ArrayList_New(TRUE); ArrayList_Object(client->ClientCallList)->fnObjectFree = (OBJECT_FREE_FN) rpc_client_call_free; } rpc->client = client; return 0; }
rdpTransport* transport_new(rdpSettings* settings) { rdpTransport* transport; transport = (rdpTransport*) malloc(sizeof(rdpTransport)); ZeroMemory(transport, sizeof(rdpTransport)); if (transport != NULL) { transport->TcpIn = tcp_new(settings); transport->settings = settings; /* a small 0.1ms delay when transport is blocking. */ transport->SleepInterval = 100; transport->ReceivePool = Queue_New(TRUE, -1, -1); transport->ReceiveQueue = Queue_New(TRUE, -1, -1); Queue_Object(transport->ReceivePool)->fnObjectFree = (OBJECT_FREE_FN) stream_free; Queue_Object(transport->ReceiveQueue)->fnObjectFree = (OBJECT_FREE_FN) stream_free; /* receive buffer for non-blocking read. */ transport->ReceiveBuffer = transport_receive_pool_take(transport); transport->ReceiveEvent = CreateEvent(NULL, TRUE, FALSE, NULL); /* buffers for blocking read/write */ transport->ReceiveStream = stream_new(BUFFER_SIZE); transport->SendStream = stream_new(BUFFER_SIZE); transport->blocking = TRUE; transport->layer = TRANSPORT_LAYER_TCP; } return transport; }
int rpc_client_new(rdpRpc* rpc) { RpcClient* client; client = (RpcClient*) calloc(1, sizeof(RpcClient)); rpc->client = client; if (!client) return -1; client->StopEvent = CreateEvent(NULL, TRUE, FALSE, NULL); if (!client->StopEvent) return -1; client->PduSentEvent = CreateEvent(NULL, TRUE, FALSE, NULL); if (!client->PduSentEvent) return -1; client->SendQueue = Queue_New(TRUE, -1, -1); if (!client->SendQueue) return -1; Queue_Object(client->SendQueue)->fnObjectFree = (OBJECT_FREE_FN) rpc_pdu_free; client->pdu = NULL; client->ReceivePool = Queue_New(TRUE, -1, -1); if (!client->ReceivePool) return -1; Queue_Object(client->ReceivePool)->fnObjectFree = (OBJECT_FREE_FN) rpc_pdu_free; client->ReceiveQueue = Queue_New(TRUE, -1, -1); if (!client->ReceiveQueue) return -1; Queue_Object(client->ReceiveQueue)->fnObjectFree = (OBJECT_FREE_FN) rpc_pdu_free; client->RecvFrag = NULL; client->FragmentPool = Queue_New(TRUE, -1, -1); if (!client->FragmentPool) return -1; Queue_Object(client->FragmentPool)->fnObjectFree = (OBJECT_FREE_FN) rpc_fragment_free; client->FragmentQueue = Queue_New(TRUE, -1, -1); if (!client->FragmentQueue) return -1; Queue_Object(client->FragmentQueue)->fnObjectFree = (OBJECT_FREE_FN) rpc_fragment_free; client->ClientCallList = ArrayList_New(TRUE); if (!client->ClientCallList) return -1; ArrayList_Object(client->ClientCallList)->fnObjectFree = (OBJECT_FREE_FN) rpc_client_call_free; return 0; }