亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cmppbuild.c

?? cmpp 發送接收短信息程序!是在linux下c 實現的。
?? C
字號:

/*******************************************************
    NAME:      cmppbuild.c
    PURPOSE:   China Mobile Peer to Peer Protocol 2.0
               Permanent connection implementation to
               submit data to Internet Short Message Gateway
               or deliver data from ISMG to upper layer.

               automatically building TCP connection implementation.

    VERSION:   0.0.1
    AUTHOR:    Ke Heng Zhong
    DATE:      2002/06/17 12:52
    MODIFIED:  2000/06/17 21:12
 ********************************************************/

#include "kevopsall.ext"
#include "cmpp.h"




int cmcon_get_unique_id()
{
    static int carcid = 0;
    if (++carcid == 0) ++carcid;
    return carcid;
}



int cmpp_build_conn (VTASK * entity, void * userInfo)
{
    CmppEntity         * cment = NULL;
    CmppCon            * cmcon = NULL;
    VTASK              * vtask = NULL;
    SPCMPP             * spc   = NULL;
    int                  addrlen;
    struct sockaddr_in   sock;
    int                  fd = -1;
    int                  connsucc = 0;

    /* current vtask is the entity */

#ifdef _DEBUG
info("cmpp_build_conn: building connection hook started.\n");
#endif

    if (!entity) return 0;
    cment = (CmppEntity *) entity->var;

    spc = (SPCMPP *)entity->cvopsState->ref;

#ifdef _DEBUG
info("cmpp_build_conn: non-block connect %s:%d\n", 
        cment->remote_host, cment->remote_port);
#endif

    fd = tcp_non_block_connect (cment->remote_host,
                        cment->remote_port, &connsucc);
    if (connsucc > 0) {
#ifdef _DEBUG
info("cmpp_build_conn: non-block connect returned connsucc:%d\n", connsucc);
#endif
        vtask = getFirstFreeConnection(entity);
        if (!vtask) {
            error("cmpp_build_conn: not enough virtual task.\n");
            close(fd);
            startTimer(entity, t_build, TBUILD);
            return 0;
        }

        cmcon = (CmppCon *) vtask->var;
        cmcon->fd = fd;

        addrlen = sizeof(sock);
        if (getpeername(fd, (struct sockaddr *)&sock, &addrlen) == 0) {
            cment->remote_ip   = sock.sin_addr;
            cmcon->remote_ip   = sock.sin_addr;
            cmcon->remote_port = sock.sin_port;
        } else {
            error("cmpp_build_conn: can't get peer address.\n");
            close(fd);
            cmcon->fd = -1;

            checkIdleConnection(vtask);
            startTimer(entity, t_build, TBUILD);
            return 0;
        }

        addrlen = sizeof(sock);
        if (getsockname(fd, (struct sockaddr *)&sock, &addrlen) == 0) {
            cmcon->local_ip = sock.sin_addr;
            cmcon->local_port = sock.sin_port;
        } else {
            cmcon->local_ip.s_addr = 0;
            cmcon->local_port = 0;
        }

        if (sk_num(cment->init_list) < cment->mt_num) {
            /* the connection is for CMPP MT connection */
            cmcon->is_mo = 0;
            cmcon->version = ((uint8)spc->mtmajorver << 4) & 0xF0;
            cmcon->version |= ((uint8)spc->mtminorver & 0x0F);
            /*cmcon->version = (((uint8)getConfInt ("General", "MTMajor_Version")) << 4) & 0xF0;;
            cmcon->version |= ((uint8)getConfInt("General","MTMinor_Version") & 0x0F);*/
        } else if (sk_num(cment->mo_list) < cment->mo_num) {
            /* the connection is for CMPP MO connection */
            cmcon->is_mo = 1;
            cmcon->version = ((uint8)spc->momajorver << 4) & 0xF0;;
            cmcon->version |= ((uint8)spc->mominorver & 0x0F);
            /*cmcon->version = (((uint8)getConfInt ("General", "MOMajor_Version")) << 4) & 0xF0;;
            cmcon->version |= ((uint8)getConfInt("General","MOMinor_Version") & 0x0F);*/
        } else {
            error("CMPP Connection number is exceeded. Now new built connection tearing down.\n");
            closesocket(fd);
            cmcon->fd = -1;
            vtask->state = cmpp_null;
            checkIdleConnection(vtask);
            return 0;
        }


        /* send CMPP connect PDU to ISMG */
        if (send_cmpp_connect (vtask) < 0) {
            error("cmpp_build_conn: TCP connection crashed while sending CMPP Connect.\n");
            vtask->state = cmpp_null;
            close(fd);   
            cmcon->fd = -1;
                         
            checkIdleConnection(vtask);
            startTimer(entity, t_build, TBUILD);
            return 0;
        }

        cmcon->devid = enterLongDevice(
                         entity->cvopsState,
                         vtask,
                         fd,
                         DF_READ,
                         cmpp_data_recv,
                         NULL,
                         "cmcon_init_recv");
        if (cmcon->devid == -1) {
            error("cmpp_build_conn: I/O device number exceeded.\n");
            close(fd);
            cmcon->fd = -1;

            checkIdleConnection(vtask);
            startTimer(entity, t_build, TBUILD);
            return 0;
        }

        cmcon->conid = cmcon_get_unique_id();
        vtask->state = cmpp_handshaking;

#ifdef _DEBUG
info("cmcon_build_conn: entity %s allocated conid %d.\n",
         entity->name, cmcon->conid);
#endif

tolog("CMPP SP TCP connect to %s:%d successfully from %s.\n",
      inet_ntoa(cmcon->remote_ip), cmcon->remote_port, vtask->name);

        return 0;
    }

    else { /* non-blocking connect operation unsuccessfully */

#ifdef _DEBUG
info("cmpp_build_conn: non-block connect not successfully, "
         "returned connsucc:%d\n", connsucc);
#endif

        if (fd != -1) {
#ifdef _DEBUG
info("cmpp_build_conn: non-block socket created, but connection coming later.\n");
#endif

            /* socket create successfully, but connection is ready later */
            vtask = getFirstFreeConnection(entity);
            if (!vtask) {
                error("cmpp_build_conn: not enough virtual task for non-blocking.\n");
                close(fd);
                startTimer(entity, t_build, TBUILD);
                return 0;
            }

            cmcon = (CmppCon *) vtask->var;
            cmcon->fd    = fd;
            cmcon->devid = enterLongDevice(
                             entity->cvopsState,
                             vtask,
                             fd,
                             DF_WRITE,
                             cmpp_conn_succ,
                             NULL,
                             "cmpp_non_blocking");
            if (cmcon->devid == -1) {
                error("cmpp_build_conn: I/O device number exceeded for non-blocking.\n");
                close(fd);
                cmcon->fd = -1;

                checkIdleConnection(vtask);
                startTimer(entity, t_build, TBUILD);
                return 0;
            }

#ifdef _DEBUG
info("cmpp_build_conn: one not-ready connection"
    " vtask %s for reserving.\n", vtask->name);
#endif
            return 0;

        } else { /* connect failed */
            error("cmpp_build_conn: non-block connect"
                  " failed completely, start t_build.\n");
            startTimer(entity, t_build, TBUILD);
        }
    }
    return 0;
}



void cmpp_conn_succ (VTASK * vtask, int fd, unsigned event)
{
    VTASK             * entity = NULL;
    CmppCon           * cmcon = NULL;
    CmppEntity        * cment = NULL;
    SPCMPP            * spc = NULL;
    int                addrlen;
    struct sockaddr_in sock;
#ifdef UNIX
    int                sockerr, sockerrlen, retval;
#endif

    if (!vtask || fd == -1 || event != DF_WRITE)
        return;

#ifdef _DEBUG
info("cmpp_conn_succ: connect event started.\n");
#endif

   spc = (SPCMPP *)vtask->cvopsState->ref;

    cmcon = (CmppCon *)vtask->var;
    entity = (VTASK *) getEntity (vtask);
    cment = (CmppEntity *)entity->var;
    if (!cmcon || !cment) {
        error("cmpp_conn_succ: internal error.\n");
        vtask->state = cmpp_null;
        checkIdleConnection(vtask);

        startTimer(entity, t_build, TBUILD);
        return;
    }

    if (cmcon->fd != fd) {
        error("cmpp_conn_succ: non-blocking connection succ indication is invalid.\n");
        close(fd);

        vtask->state = cmpp_null;
        checkIdleConnection(vtask);

        if (cmcon->is_mo)
            sk_delete_ptr(cment->mo_list, vtask);
        else
            sk_delete_ptr(cment->init_list, vtask);

        startTimer(entity, t_build, TBUILD);

        return;
    }

#ifdef UNIX
        sockerrlen = sizeof(int);
        sockerr = 0;
        retval = getsockopt(fd, SOL_SOCKET, SO_ERROR, &sockerr, &sockerrlen);
        if (retval < 0 || sockerr != 0) {
            error("cmpp_conn_succ: %s.\n",
                    retval < 0 ? "getsockopt error":"non-blocking unsuccessfully!");
            removeDevice(vtask->cvopsState, cmcon->devid);
            cmcon->devid = -1;
            closesocket(cmcon->fd);
            cmcon->fd = INVALID_SOCKET;

            vtask->state = cmpp_null;
            checkIdleConnection(vtask);

            if (cmcon->is_mo)
                sk_delete_ptr(cment->mo_list, vtask);
            else
                sk_delete_ptr(cment->init_list, vtask);
            startTimer(entity, t_build, TBUILD);
            return;
        }
#endif

    removeDevice(vtask->cvopsState, cmcon->devid);
    cmcon->devid = -1;

    addrlen = sizeof(sock);
    if (getpeername(fd, (struct sockaddr *)&sock, &addrlen) == 0) {
        cment->remote_ip   = sock.sin_addr;
        cmcon->remote_ip   = sock.sin_addr;
        cmcon->remote_port = sock.sin_port;
    } else {
        error("cmpp_conn_succ: can't get peer address.\n");
        close(cmcon->fd);
        cmcon->fd = -1;

        vtask->state = cmpp_null;
        checkIdleConnection(vtask);

        if (cmcon->is_mo)
            sk_delete_ptr(cment->mo_list, vtask);
        else
            sk_delete_ptr(cment->init_list, vtask);
        startTimer(entity, t_build, TBUILD);
        return;
    }

    addrlen = sizeof(sock);
    if (getsockname(fd, (struct sockaddr *)&sock, &addrlen) == 0) {
        cmcon->local_ip = sock.sin_addr;
        cmcon->local_port = sock.sin_port;
    } else {
        cmcon->local_ip.s_addr = 0;
        cmcon->local_port = 0;
    }

    if (sk_num(cment->init_list) < cment->mt_num) {
        /* the connection is for CMPP MT connection */
        cmcon->is_mo = 0;
        cmcon->version = ((uint8)spc->mtmajorver << 4) & 0xF0;
        cmcon->version |= ((uint8)spc->mtminorver & 0x0F);
        /*cmcon->version = (((uint8)getConfInt ("General", "MTMajor_Version")) << 4) & 0xF0;;
        cmcon->version |= ((uint8)getConfInt("General","MTMinor_Version") & 0x0F);*/
    } else if (sk_num(cment->mo_list) < cment->mo_num) {
        /* the connection is for CMPP MO connection */
        cmcon->is_mo = 1;
        cmcon->version = ((uint8)spc->momajorver << 4) & 0xF0;;
        cmcon->version |= ((uint8)spc->mominorver & 0x0F);
        /*cmcon->version = (((uint8)getConfInt ("General", "MOMajor_Version")) << 4) & 0xF0;;
        cmcon->version |= ((uint8)getConfInt("General","MOMinor_Version") & 0x0F);*/
    } else {
        error("CMPP Connection number is exceeded. Now new built connection tearing down.\n");
        closesocket(fd);
        cmcon->fd = -1;
        vtask->state = cmpp_null;
        checkIdleConnection(vtask);
        return;
    }



    /* send CMPP connect PDU to ISMG */
    if (send_cmpp_connect (vtask) < 0) {
        error("cmpp_build_conn: TCP connection crashed while sending CMPP Connect.\n");
        vtask->state = cmpp_null;
        close(fd);
        cmcon->fd = -1;

        checkIdleConnection(vtask);
        startTimer(entity, t_build, TBUILD);
        return;
    }

    cmcon->devid = enterLongDevice(
                     vtask->cvopsState,
                     vtask,
                     fd,
                     DF_READ,
                     cmpp_data_recv,
                     NULL,
                     "cmcon_init_recv");
    if (cmcon->devid == -1) {
        error("cmpp_conn_succ: I/O device number exceeded.\n");
        close(fd);
        cmcon->fd = -1;

        vtask->state = cmpp_null;
        checkIdleConnection(vtask);
 
        if (cmcon->is_mo)
            sk_delete_ptr(cment->mo_list, vtask);
        else
            sk_delete_ptr(cment->init_list, vtask);
        startTimer(entity, t_build, TBUILD);

        return;
    }

    cmcon->conid = cmcon_get_unique_id();

#ifdef _DEBUG
info("cmpp_conn_succ: alloc connection id:%d.\n", cmcon->conid);
#endif

    vtask->state = cmpp_handshaking;

tolog("CMPP SP TCP connect to %s:%d successfully from %s.\n",
      inet_ntoa(cmcon->remote_ip), cmcon->remote_port, vtask->name);

    checkIdleConnection(vtask);
    return;
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久晋中 | 99在线热播精品免费| 玉足女爽爽91| 久久天堂av综合合色蜜桃网 | 日韩欧美一二三| 色综合久久久久综合99| 久久国内精品自在自线400部| 国产精品乱码久久久久久| 欧美日韩电影一区| 成人黄色在线看| 久久99精品一区二区三区三区| 亚洲人成在线观看一区二区| 精品久久一二三区| 欧美裸体bbwbbwbbw| 色综合中文字幕国产 | 狠狠网亚洲精品| 午夜a成v人精品| 一区二区三区在线不卡| 久久综合狠狠综合久久激情| 欧美视频一区二区三区在线观看| 成人午夜在线视频| 九九九久久久精品| 日韩av中文字幕一区二区 | 精品在线免费视频| 午夜久久久久久久久久一区二区| 国产精品久久久久久久久久久免费看| 精品久久一二三区| 欧美一级日韩不卡播放免费| 在线亚洲一区二区| 91小视频免费看| 国产原创一区二区| 国产精品三级视频| 国产亚洲精品aa| 久久这里只有精品首页| 日韩视频一区二区三区在线播放| 欧美伊人精品成人久久综合97| av欧美精品.com| 成人h动漫精品| 成人在线视频一区二区| 国产麻豆成人传媒免费观看| 久久99国产精品久久99果冻传媒| 免费在线观看视频一区| 午夜精品福利一区二区三区蜜桃| 又紧又大又爽精品一区二区| 亚洲精品久久嫩草网站秘色| 成人免费一区二区三区在线观看| 国产精品久久三| 亚洲视频在线一区| 国产一区二区女| 国产91精品在线观看| 国产精品一区二区视频| 国产精品123区| www.在线欧美| 91福利在线免费观看| 欧美在线影院一区二区| 精品污污网站免费看| 日韩专区在线视频| 亚洲精品中文字幕乱码三区| 亚洲欧洲综合另类| 亚洲无线码一区二区三区| 天天操天天综合网| 精品一区二区三区久久| 风流少妇一区二区| av午夜精品一区二区三区| 欧美综合久久久| 日韩精品一区二区三区在线观看 | 国产精品美女视频| 亚洲精品视频在线看| 亚洲成人7777| 九九视频精品免费| 91在线国产观看| 欧美日韩亚洲综合在线 | 久久久不卡网国产精品一区| 国产三级精品在线| 一区二区三区国产豹纹内裤在线| 午夜精品免费在线观看| 国精产品一区一区三区mba视频| 国产一区二区三区免费播放| 99久久久无码国产精品| 678五月天丁香亚洲综合网| 26uuu国产一区二区三区| 亚洲日本va在线观看| 丝袜美腿成人在线| 成人午夜视频在线| 欧美三级日本三级少妇99| 精品国产三级a在线观看| 中文字幕在线不卡一区二区三区 | 国产91丝袜在线18| 欧美日韩一区二区三区四区 | 日本不卡一二三| 成人禁用看黄a在线| 91精品国产麻豆国产自产在线| 久久综合视频网| 99精品久久99久久久久| 在线成人午夜影院| 国产精品三级视频| 麻豆久久一区二区| 91蜜桃视频在线| 欧美精品一区二区三区很污很色的| 国产精品福利一区二区三区| 天堂va蜜桃一区二区三区漫画版| 国产成人福利片| 欧美一区二区三区思思人| 亚洲男人天堂av| 国产乱一区二区| 538prom精品视频线放| 国产精品久久久久影院老司| 蜜桃视频一区二区| 欧美四级电影在线观看| 国产精品传媒入口麻豆| 国产在线国偷精品免费看| 欧美精品第1页| 亚洲精品五月天| 不卡一区在线观看| 久久久久久久网| 蜜臀av性久久久久蜜臀aⅴ| 欧美色欧美亚洲另类二区| 中文字幕一区二区三区在线播放 | 亚洲精品视频在线看| 高清国产一区二区| 久久影院视频免费| 蜜桃久久久久久久| 91精品国产综合久久蜜臀| 亚洲国产日韩a在线播放性色| 成人av资源下载| 国产精品女上位| 国产91对白在线观看九色| 精品久久人人做人人爱| 久久成人精品无人区| 日韩一区二区免费在线观看| 日本一区中文字幕| 欧美猛男gaygay网站| 午夜精品福利久久久| 欧美日韩亚洲综合在线| 午夜欧美在线一二页| 欧美日韩一区二区三区在线 | 中文字幕的久久| 成人在线视频一区二区| 亚洲国产成人午夜在线一区| 粉嫩av亚洲一区二区图片| 国产农村妇女精品| 成人在线视频一区| 中文字幕在线不卡一区| 99久久精品免费看国产免费软件| 国产精品乱人伦| 99re亚洲国产精品| 一区二区三区av电影| 欧美在线看片a免费观看| 亚瑟在线精品视频| 91麻豆精品国产91久久久| 免费高清在线视频一区·| 精品国产乱码久久久久久图片| 极品瑜伽女神91| 欧美国产日韩一二三区| 一本大道av一区二区在线播放| 一区二区三区四区中文字幕| 欧美日韩一区中文字幕| 六月婷婷色综合| 国产亚洲综合色| 色激情天天射综合网| 日韩在线一二三区| 久久久午夜电影| 91小视频免费看| 日本亚洲三级在线| 国产目拍亚洲精品99久久精品| 99综合电影在线视频| 亚洲国产综合色| 欧美sm美女调教| 99精品欧美一区二区三区小说| 亚洲国产综合色| 久久午夜羞羞影院免费观看| 成人黄色777网| 天天亚洲美女在线视频| 久久中文娱乐网| 91国模大尺度私拍在线视频| 日韩成人av影视| 国产精品国产三级国产aⅴ中文| 欧美主播一区二区三区| 国内精品久久久久影院色| 亚洲色欲色欲www在线观看| 9191久久久久久久久久久| 大美女一区二区三区| 亚洲第一在线综合网站| 国产丝袜欧美中文另类| 欧美在线视频日韩| 国产不卡视频在线观看| 图片区小说区国产精品视频| 国产亚洲1区2区3区| 欧美日本一道本| 99精品视频在线观看免费| 毛片av中文字幕一区二区| 亚洲精品乱码久久久久久久久 | 久久九九99视频| 精品视频999| 成人av资源在线| 久久国产剧场电影| 性久久久久久久久久久久| 国产精品国产三级国产| 精品成人一区二区三区| 欧美性大战久久久久久久|