|
MXCopyMessage |
C
NetProg Library |
|
#include
"mx.h"
|
|
|
MXMessage* MXCopyMessage (MXMessage*
frommessage) |
|
Parameters |
Description |
frommessage |
the
message instance to copy |
Copy the message frommessage
in a new instance
Return
Values : returns a copy of the message
|
/* Navigator should connect on
8080 port */
#include "mx.h"
#include "http.h"
DWORD NbOpen = 0;
DWORD NbOpen1 = 0;
int OnCloseClient (MXCom* pcom, void* appfield)
{
MXCom* ServerCom = MXGetComApplicationField (pcom);
printf ("===> Navigator closed = %d\n", --NbOpen1);
if (!ServerCom)
return 1;
return 1;
}
int OnCloseServer (MXCom* pcom, void* appfield)
{
MXCom* ClientCom = = MXGetComApplicationField (pcom);
int ret = 0;
printf ("===> Server closed = %d\n", --NbOpen);
if (!ClientCom)
return 1;
ret = MXFlushCom (pcom->MX, ClientCom);
return 1;
}
int RecvResponse (MXMessage* pmessage, MXCom* pcom, void* AppField)
{
MXCom* ClientCom = (MXCom*)AppField;
BUFFERPARM* Buffer;
MXMessage* CopyMessage = MXCopyMessage (pmessage);
Buffer = (BUFFERPARM*)MXGetValue (pmessage, "Content", 1);
if (!ClientCom->Client)
printf ("Oupssssss\n");
else
MXPutThisMessage (ClientCom, CopyMessage);
return 1;
}
int RecvRequest (MXMessage* pmessage, MXCom* pcom, void* AppField)
{
MXCom* webpcom;
STRING server = MXGetValue (pmessage, "Host", 1);
STRING Request = (STRING)MXGetValue (pmessage, "Request-Line", 1);
MXMessage* CopyMessage = MXCopyMessage (pmessage);
webpcom = MXOpenTCP (pcom->MX, server, 80, IPPROTO_HTTP, NULL, NULL, MXBlock);
if (!webpcom) return 1;
MXAddEndingProcedure (webpcom, OnCloseServer, pcom);
MXAddEndingProcedure (pcom, OnCloseClient, webpcom);
MXAddComCallBack (pcom->MX, webpcom, HTTP_SYS, "Response",MXONRECV, RecvResponse, pcom);
MXSetComApplicationField (pcom, webpcom);
MXSetComApplicationField (webpcom, pcom);
printf ("===> Open a new connection %d\n", ++NbOpen);
CopyMessage = MXCopyMessage (pmessage);
MXPutThisMessage (webpcom, CopyMessage);
return 1;
}
int OnConnect (MXCom* pcom, void* appfield)
{
if (MXGetPort (pcom) != 8080) return 1;
printf ("===> Navigator opened = %d\n", ++NbOpen1);
MXAddComCallBack (pcom->MX, pcom, HTTP_SYS, "Request", MXONRECV, RecvRequest, NULL);
return 1;
}
int main(int argc, char* argv[])
{
MX mx;
MXInit (&mx, MXSERVER, NULL, NULL, 0, NULL);
MXAddPort (&mx, 8080, IPPROTO_HTTP);
MXAddGeneralConnectCallBack (&mx, MXONCONNECT, OnConnect, &mx);
MXDispatchEvents (&mx, 0);
MXEnd (&mx);
}
|
|