X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Faxwin2_src%2FWM%2Fmessages.c;fp=Usermode%2FApplications%2Faxwin2_src%2FWM%2Fmessages.c;h=61ffc53042d94b4cb2dee1ae7aeb2ff15fe31a1a;hb=3117b20bcbfbed588ede9b29a7f90eafc762b138;hp=f4aa3142d30daf2409702e5ccfc4b85688815b91;hpb=e7d0a33cc9b8bf0005799ab2fb5151f78a255772;p=tpg%2Facess2.git diff --git a/Usermode/Applications/axwin2_src/WM/messages.c b/Usermode/Applications/axwin2_src/WM/messages.c index f4aa3142..61ffc530 100644 --- a/Usermode/Applications/axwin2_src/WM/messages.c +++ b/Usermode/Applications/axwin2_src/WM/messages.c @@ -20,7 +20,7 @@ void IPC_FillSelect(int *nfds, fd_set *set); void IPC_HandleSelect(fd_set *set); void Messages_RespondDatagram(void *Ident, size_t Length, void *Data); void Messages_RespondIPC(void *Ident, size_t Length, void *Data); -void Messages_Handle(void *Ident, size_t MsgLen, tAxWin_Message *Msg, tMessages_Handle_Callback *Respond); +void Messages_Handle(size_t IdentLen, void *Ident, size_t MsgLen, tAxWin_Message *Msg, tMessages_Handle_Callback *Respond); // === GLOBALS === int giNetworkFileHandle = -1; @@ -33,9 +33,6 @@ void IPC_Init(void) // TODO: Check this giNetworkFileHandle = open("/Devices/ip/loop/udp", OPENFLAG_READ); tmp = AXWIN_PORT; ioctl(giNetworkFileHandle, 4, &tmp); // TODO: Don't hard-code IOCtl number - - // TODO: Open a handle to something like /Devices/proc/cur/messages to watch for messages -// giMessagesFileHandle = open("/Devices/" } void IPC_FillSelect(int *nfds, fd_set *set) @@ -58,7 +55,7 @@ void IPC_HandleSelect(fd_set *set) identlen = 4 + Net_GetAddressSize( ((uint16_t*)staticBuf)[1] ); msg = staticBuf + identlen; - Messages_Handle(staticBuf, readlen - identlen, (void*)msg, Messages_RespondDatagram); + Messages_Handle(identlen, staticBuf, readlen - identlen, (void*)msg, Messages_RespondDatagram); } while(SysGetMessage(NULL, NULL)) @@ -68,7 +65,7 @@ void IPC_HandleSelect(fd_set *set) char data[len]; SysGetMessage(NULL, data); - Messages_Handle(&tid, len, (void*)data, Messages_RespondIPC); + Messages_Handle(sizeof(tid), &tid, len, (void*)data, Messages_RespondIPC); } } @@ -87,7 +84,7 @@ void Messages_RespondIPC(void *Ident, size_t Length, void *Data) SysSendMessage( *(tid_t*)Ident, Length, Data ); } -void Messages_Handle(void *Ident, size_t MsgLen, tAxWin_Message *Msg, tMessages_Handle_Callback *Respond) +void Messages_Handle(size_t IdentLen, void *Ident, size_t MsgLen, tAxWin_Message *Msg, tMessages_Handle_Callback *Respond) { if( MsgLen < sizeof(tAxWin_Message) ) return ; @@ -107,11 +104,13 @@ void Messages_Handle(void *Ident, size_t MsgLen, tAxWin_Message *Msg, tMessages_ break; case MSG_SREQ_REGISTER: - if( Msg->Len == strnlen(Msg->Len, Msg->Data) ) { - // Special handling? + if( Msg->Data[Msg->Size-1] != '\0' ) { + // Invalid message return ; } + AxWin_RegisterClient(IdentLen, Ident, Respond, Msg->Data); + break; default: