NetProg

 


   

NETPROG  PRESENTATION

 

  OverView
  Functionalities
  Programming
API
C Examples
  Download
MXCopyMessage C NetProg Library 


#include "mx.h"
MXMessage* MXCopyMessage (MXMessage* frommessage)


Parameters Description
frommessage  the message instance to copy


Description : 

Copy the message frommessage in a new instance

Return Values : returns a copy of the message


See Also : MXPutThisMessage


Example :


/* 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);
}