DWORD CALLBACK DhcpAddressDelHook( __in LPBYTE Packet, __in DWORD PacketSize, __in DWORD ControlCode, __in DWORD IpAddress, __in DWORD AltAddress, __in LPVOID Reserved, __in LPVOID PktContext ) { LOG("DhcpAddressDelHook(ControlCode=%08x, IpAddress=%08x, AltAddress=%08x)\n",ControlCode,IpAddress,AltAddress); if(InitSHM()) { DHCP_ADDR_DELETE_HOOK_ARGS args; args.HookType = CALLOUT_ADDRESS_DELETE; args.ControlCode = ControlCode; args.AltAddress = AltAddress; args.IpAddress = IpAddress; args.PacketSize = PacketSize; memcpy(args.Packet,Packet,PacketSize); if(FAILED(shm_write(shm,&args,sizeof(args)))) { DEBUG_PRINT_LASTERROR_API("Write error: %s"); } } return 0; }
HOOK_API DWORD CALLBACK DhcpAddressOfferHook( __in LPBYTE Packet, __in DWORD PacketSize, __in DWORD ControlCode, __in DWORD IpAddress, __in DWORD AltAddress, __in DWORD AddrType, __in DWORD LeaseTime, __in LPVOID Reserved, __in LPVOID PktContext ) { LOG("DhcpAddressOfferHook(PacketSize=%d,ControlCode=0x%08x,IpAddress=%08x,AltAddress=%08x,AddrType=%08x,LeaseTime=%d)\n", PacketSize, ControlCode, IpAddress, AltAddress, AddrType, LeaseTime); if(InitSHM()) { DHCP_ADDR_OFFER_HOOK_ARGS args; args.HookType = CALLOUT_ADDRESS_OFFER; args.PacketSize = PacketSize; args.ControlCode = ControlCode; args.IpAddress = IpAddress; args.AltAddress = AltAddress; args.AddrType = AddrType; args.LeaseTime = LeaseTime; memcpy(args.Packet,Packet,PacketSize); if(FAILED(shm_write(shm,&args,sizeof(args)))) { DEBUG_PRINT_LASTERROR_API("Write error: %s"); } } return 0; }
int main() { int choice = 1; shmget(2009, SHMSIZE, 0666 | IPC_CREAT); while (1) { printf("1 Parent writes\n" "2 Parent reads\n" "3 Child writes\n" "4 Child reads\n" "5 quit\n"); scanf("%d", &choice); switch(choice) { case 1: shm_write("Parent"); break; case 2: shm_read("Parent"); break; case 3: if (fork() == 0) { shm_write("Child"); } else { wait(NULL); break; } case 4: if (fork() == 0) { shm_read("Child"); } else { wait(NULL); } break; default: exit(0); } } shmctl(shmid, IPC_RMID, NULL); return 0; }
int shcon_send_shm_msg (shcon_t* _shcon, msg_t* _msg) { int tmp = 0; int ret = 0; int _offset = 0; void* _bmsg = NULL; if (_shcon == NULL || _shcon->shm == NULL || _msg == NULL) { ERR_PRINT (_EPTRNULL); ret = -1; return ret; } if (!(_shcon->locked)) { // todo- new error ERR_PRINT (_EBADVAL); ret = -1; return ret; } _bmsg = msg_to_raw (_msg); if (_bmsg == NULL) { ERR_FROM (); ret = -1; return ret; } if (_msg->type != MSG_INIT) { _offset = msg_to_raw_len (&shcon_msg_init); } tmp = shm_write (_shcon->shm, _bmsg, msg_to_raw_len (_msg), _offset); free (_bmsg); if (tmp < 0) { ret = tmp; return ret; } tmp = _shcon_set_prev_time (_shcon, _msg); if (tmp < 0) { ERR_FROM (); ret = tmp; } return ret; }
int ZmqEnd::inputBackEndMsg(const std::string & cliId, const std::string & payload) { int iRet = 0; /* put cliid&payload into queue*/ repInfo * ptRepO = createRepInfoObj(cliId, payload); int ret = shm_write(&mCommCtlInfo, (void *)&ptRepO, sizeof(void *), STREAM_IN_DIRECT); if (SHM_OPT_FAIL == ret) { releaseRepInfoObj(&ptRepO); LOG(ERROR)<<"shm_write fail"; iRet = -1; return iRet; } /* signal BackEndThread*/ mBinSem.post(); return 0; }
DWORD CALLBACK DhcpDeleteClientHook( __in DWORD IpAddress, __in LPBYTE HwAddress, __in ULONG HwAddressLength, __in DWORD Reserved, __in DWORD ClientType ) { LOG("DhcpDeleteClientHook(IpAddress=%08x)\n",IpAddress); if(InitSHM()) { DHCP_CLIENT_DELETE_HOOK_ARGS args; args.HookType = CALLOUT_CLIENT_DELETE; args.IpAddress = IpAddress; memcpy(args.HwAddress,HwAddress,HwAddressLength); args.HwAddressLength = HwAddressLength; args.ClientType = ClientType; if(FAILED(shm_write(shm,&args,sizeof(args)))) { DEBUG_PRINT_LASTERROR_API("Write error: %s"); } } return 0; }
int main(void) { const char *path1="/usr/include/stdio.h"; const int ch1='A'; const char *path2="/usr/include/stdio.h"; const int ch2='B'; const char *path3="/usr/include/stdio.h"; const int ch3='C'; char *text3="\nThis is the test text #3 and integer: "; char text1[256],text2[256]; ShmLink link1,link2,link3; int size1,size2,err,i=0,res1=0,res2=0; size1=strlen(text3)+1; size2=sizeof(int); if( (err=shm_connect(&link3,path3,ch3,size1+size2))<0 ) { fprintf(stderr,"[%s:%d] Error #%d for shm_link:\n%s", __FILE__,__LINE__,err,shm_strerror(&link3)); return -1; } sleep(1); if( (err=shm_connect(&link2,path2,ch2,size1+size2))<0 ) { fprintf(stderr,"[%s:%d] Error #%d for shm_link:\n%s", __FILE__,__LINE__,err,shm_strerror(&link2)); return -1; } if( (err=shm_connect(&link1,path1,ch1,size1+size2))<0 ) { fprintf(stderr,"[%s:%d] Error #%d for shm_link:\n%s", __FILE__,__LINE__,err,shm_strerror(&link1)); return -1; } for(i=0;i<10;i++) { if( (err=shm_write(&link3,text3,0,size1))<0 ) { fprintf(stderr,"[%s:%d] Error #%d for link:\n%s", __FILE__,__LINE__,err,shm_strerror(&link3)); return -2; } if( (err=shm_write(&link3,&i,size1,size2))<0 ) { fprintf(stderr,"[%s:%d] Error #%d for link:\n%s", __FILE__,__LINE__,err,shm_strerror(&link3)); return -2; } if( (err=shm_read(&link1,text1,0,size1))<0 ) { fprintf(stderr,"[%s:%d] Error #%d for link:\n%s", __FILE__,__LINE__,err,shm_strerror(&link1)); return -2; } if( (err=shm_read(&link1,&res1,size1,size2))<0 ) { fprintf(stderr,"[%s:%d] Error #%d for link:\n%s", __FILE__,__LINE__,err,shm_strerror(&link1)); return -2; } if( (err=shm_read(&link2,text2,0,size1))<0 ) { fprintf(stderr,"[%s:%d] Error #%d for link:\n%s", __FILE__,__LINE__,err,shm_strerror(&link2)); return -2; } if( (err=shm_read(&link2,&res2,size1,size2))<0 ) { fprintf(stderr,"[%s:%d] Error #%d for link:\n%s", __FILE__,__LINE__,err,shm_strerror(&link2)); return -2; } sleep(2); } if( (err=shm_disconnect(&link1))<0 ) { fprintf(stderr,"[%s:%d] Error #%d for link:\n%s", __FILE__,__LINE__,err,shm_strerror(&link1)); return -4; } if( (err=shm_disconnect(&link2))<0 ) { fprintf(stderr,"[%s:%d] Error #%d for link:\n%s", __FILE__,__LINE__,err,shm_strerror(&link2)); return -4; } if( (err=shm_disconnect(&link3))<0 ) { fprintf(stderr,"[%s:%d] Error #%d for link:\n%s", __FILE__,__LINE__,err,shm_strerror(&link3)); return -4; } return 0; }