예제 #1
0
RPC_Handle_t RPC_SYS_RegisterClient(const RPC_InitParams_t *params) 
{
	UInt8 userClientID;
	UInt8 clientIndex = 0;

	gClientIndex++;

	clientIndex = gClientIndex;

	if(clientIndex >= MAX_RPC_CLIENTS)
		return (RPC_Handle_t)NULL;

	gClientMap[clientIndex] = *params;

	RPC_PACKET_RegisterDataInd(0, (PACKET_InterfaceType_t)(gClientMap[clientIndex].iType), RPC_BufferDelivery, params->flowCb);

	rpc_internal_xdr_init();
	rpc_register_xdr(clientIndex, params->xdrtbl, params->table_size);

	userClientID = SYS_GenClientID();

	gClientIDs[userClientID] = clientIndex;
	gClientIDMap[clientIndex] = userClientID;
	gClientLocalMap[clientIndex].notifyUnsolicited = FALSE;

	_DBG_(RPC_TRACE("RPC_SYS_RegisterClient index=%d userClientID=%d", clientIndex, userClientID));

	return (RPC_Handle_t)clientIndex;
}
예제 #2
0
RPC_Handle_t RPC_SYS_RegisterClient(const RPC_InitParams_t *params)
{
	UInt8 userClientID;
	UInt8 clientIndex = 0;
	int index;

	_DBG_(RPC_TRACE("RPC_SYS_RegisterClient gRpcInit=%d tblSize=%d",
			gRpcInit, params->table_size));

	if (!gRpcInit)
		RPC_SYS_Init(NULL);

	RPC_USER_LOCK(gRpcLock);

	index = RPC_FindUnsedSlot();
	if (index == -1) {
		_DBG_(RPC_TRACE
		      ("RPC_SYS_RegisterClient ERROR Max clients reached"));

		RPC_USER_UNLOCK(gRpcLock);
		return (RPC_Handle_t) 0;
	}

	gClientIndex++;

	clientIndex = index;

	gClientMap[clientIndex] = *params;

	userClientID = SYS_GenClientID();

	if (userClientID == 0) {
		_DBG_(RPC_TRACE
		      ("RPC_SYS_RegisterClient client ID allocation fail"));

		RPC_USER_UNLOCK(gRpcLock);
		return (RPC_Handle_t) 0;
	}

	_DBG_(RPC_TRACE
	      ("RPC_SYS_RegisterClient index=%d userClientID=%d gClientIndex=%d",
	       clientIndex, userClientID, gClientIndex));

	RPC_PACKET_RegisterDataInd(userClientID,
				   (PACKET_InterfaceType_t)(gClientMap
							    [clientIndex].
							    iType),
				   RPC_BufferDelivery, params->flowCb,
				   RPC_Handle_CPReset);

	rpc_internal_xdr_init();
	rpc_register_xdr(clientIndex, params->xdrtbl, params->table_size);

	gClientIDs[userClientID] = clientIndex;
	gClientIDMap[clientIndex] = userClientID;
	gClientLocalMap[clientIndex].notifyUnsolicited = FALSE;
	gClientLocalMap[clientIndex].ackdCPReset = FALSE;

	RPC_USER_UNLOCK(gRpcLock);
	return (RPC_Handle_t) clientIndex;
}