git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Modules/LVM - Fixed uninitalised value
[tpg/acess2.git]
/
AcessNative
/
acesskernel_src
/
server.c
diff --git
a/AcessNative/acesskernel_src/server.c
b/AcessNative/acesskernel_src/server.c
index
264f412
..
7bb5033
100644
(file)
--- a/
AcessNative/acesskernel_src/server.c
+++ b/
AcessNative/acesskernel_src/server.c
@@
-38,6
+38,7
@@
typedef struct {
// === IMPORTS ===
extern tRequestHeader *SyscallRecieve(tRequestHeader *Request, int *ReturnLength);
extern int Threads_CreateRootProcess(void);
// === IMPORTS ===
extern tRequestHeader *SyscallRecieve(tRequestHeader *Request, int *ReturnLength);
extern int Threads_CreateRootProcess(void);
+extern void Threads_SetThread(int TID);
// HACK: Should have these in a header
extern void Log_Debug(const char *Subsys, const char *Message, ...);
extern void Log_Notice(const char *Subsys, const char *Message, ...);
// HACK: Should have these in a header
extern void Log_Debug(const char *Subsys, const char *Message, ...);
extern void Log_Notice(const char *Subsys, const char *Message, ...);
@@
-46,6
+47,7
@@
extern void Log_Notice(const char *Subsys, const char *Message, ...);
tClient *Server_GetClient(int ClientID);
int Server_WorkerThread(void *ClientPtr);
int SyscallServer(void);
tClient *Server_GetClient(int ClientID);
int Server_WorkerThread(void *ClientPtr);
int SyscallServer(void);
+ int Server_ListenThread(void *Unused);
// === GLOBALS ===
#ifdef __WIN32__
// === GLOBALS ===
#ifdef __WIN32__
@@
-56,6
+58,7
@@
SOCKET gSocket = INVALID_SOCKET;
int gSocket = INVALID_SOCKET;
#endif
tClient gaServer_Clients[MAX_CLIENTS];
int gSocket = INVALID_SOCKET;
#endif
tClient gaServer_Clients[MAX_CLIENTS];
+SDL_Thread *gpServer_ListenThread;
// === CODE ===
int Server_GetClientID(void)
// === CODE ===
int Server_GetClientID(void)
@@
-133,11
+136,17
@@
int Server_WorkerThread(void *ClientPtr)
cur_client_id = Client->ClientID;
}
cur_client_id = Client->ClientID;
}
- Log_Debug("AcessSrv", "Worker %i takes %p",
- Client->ClientID, Client->CurrentRequest);
-
// Get the response
retHeader = SyscallRecieve(Client->CurrentRequest, &retSize);
// Get the response
retHeader = SyscallRecieve(Client->CurrentRequest, &retSize);
+
+ {
+ int callid = Client->CurrentRequest->CallID;
+ Log_Debug("AcessSrv", "Client %i request %i %s",
+ Client->ClientID, callid,
+ callid < N_SYSCALLS ? casSYSCALL_NAMES[callid] : "UNK"
+ );
+ }
+
if( !retHeader ) {
// Return an error to the client
if( !retHeader ) {
// Return an error to the client
@@
-152,13
+161,14
@@
int Server_WorkerThread(void *ClientPtr)
retHeader->ClientID = Client->ClientID;
// Mark the thread as ready for another job
retHeader->ClientID = Client->ClientID;
// Mark the thread as ready for another job
+ free(Client->CurrentRequest);
Client->CurrentRequest = 0;
Client->CurrentRequest = 0;
-
Log_Debug("AcessSrv", "Sending %i to %x:%i (Client %i)",
-
retSize, ntohl(Client->ClientAddr.sin_addr.s_addr),
-
ntohs(Client->ClientAddr.sin_port),
-
Client->ClientID
-
);
+
//
Log_Debug("AcessSrv", "Sending %i to %x:%i (Client %i)",
+
//
retSize, ntohl(Client->ClientAddr.sin_addr.s_addr),
+
//
ntohs(Client->ClientAddr.sin_port),
+
//
Client->ClientID
+
//
);
// Return the data
sentSize = sendto(gSocket, retHeader, retSize, 0,
// Return the data
sentSize = sendto(gSocket, retHeader, retSize, 0,
@@
-229,7
+239,12
@@
int SyscallServer(void)
#endif
Log_Notice("AcessSrv", "Listening on 0.0.0.0:%i", SERVER_PORT);
#endif
Log_Notice("AcessSrv", "Listening on 0.0.0.0:%i", SERVER_PORT);
-
+ gpServer_ListenThread = SDL_CreateThread( Server_ListenThread, NULL );
+ return 0;
+}
+
+int Server_ListenThread(void *Unused)
+{
// Wait for something to do :)
for( ;; )
{
// Wait for something to do :)
for( ;; )
{
@@
-263,8
+278,8
@@
int SyscallServer(void)
// Hand off to a worker thread
// - TODO: Actually have worker threads
// Hand off to a worker thread
// - TODO: Actually have worker threads
-
printf("%i bytes from %x:%i\n
", length,
-
ntohl(addr.sin_addr.s_addr), ntohs(addr.sin_port));
+
// Log_Debug("Server", "%i bytes from %x:%i
", length,
+
//
ntohl(addr.sin_addr.s_addr), ntohs(addr.sin_port));
client = Server_GetClient(req->ClientID);
// NOTE: Hack - Should check if all zero
client = Server_GetClient(req->ClientID);
// NOTE: Hack - Should check if all zero
@@
-289,11
+304,13
@@
int SyscallServer(void)
Log_Debug("AcessSrv", "Message from Client %i (%p)",
client->ClientID, client);
Log_Debug("AcessSrv", "Message from Client %i (%p)",
client->ClientID, client);
-
+
+ // Make a copy of the request data
+ req = malloc(length);
+ memcpy(req, data, length);
client->CurrentRequest = req;
SDL_CondSignal(client->WaitFlag);
#endif
}
client->CurrentRequest = req;
SDL_CondSignal(client->WaitFlag);
#endif
}
-
return -1;
}
return -1;
}
UCC
git Repository :: git.ucc.asn.au