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;
}
Example #3
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;
}
Example #4
0
File: shcon.c Project: rbong/shcon
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;
}
Example #5
0
 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;
}
Example #7
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;
}