⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test-sdt.c

📁 No7信令,我需要交换类似的代码, 请店长审核,谢谢了,急着交换,谢谢
💻 C
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************** @(#) test-sdt.c,v SS7AlphaRelease(0.7.8.2) 2001/12/11 15:28:46 ----------------------------------------------------------------------------- Copyright (c) 2001 OpenSS7 Corporation <http://www.openss7.com/> Copyright (c) 1997-2000 Brian F. G. Bidulock <bidulock@dallas.net> All Rights Reserved. Unauthorized distribution or duplication is prohibited. This software and related documentation is protected by copyright and distributed under licenses restricting its use, copying, distribution and decompilation.  No part of this software or related documentation may be reproduced in any form by any means without the prior written authorization of the copyright holder, and licensors, if any. The recipient of this document, by its retention and use, warrants that the recipient will protect this information and keep it confidential, and will not disclose the information contained in this document without the written permission of its owner. The author reserves the right to revise this software and documentation for any reason, including but not limited to, conformity with standards promulgated by various agencies, utilization of advances in the state of the technical arts, or the reflection of changes in the design of any techniques, or procedures embodied, described, or referred to herein. The author is under no obligation to provide any feature listed herein. ----------------------------------------------------------------------------- U.S. GOVERNMENT RESTRICTED RIGHTS.  If you are licensing this Software on behalf of the U.S. Government ("Government"), the following provisions apply to you.  If the Software is supplied by the Department of Defense ("DoD"), it is classified as "Commercial Computer Software" under paragraph 252.227-7014 of the DoD Supplement to the Federal Acquisition Regulations ("DFARS") (or any successor regulations) and the Government is acquiring only the license rights granted herein (the license rights customarily provided to non-Government users).  If the Software is supplied to any unit or agency of the Government other than DoD, it is classified as "Restricted Computer Software" and the Government's rights in the Software are defined in paragraph 52.227-19 of the Federal Acquisition Regulations ("FAR") (or any success regulations) or, in the cases of NASA, in paragraph 18.52.227-86 of the NASA Supplement to the FAR (or any successor regulations). ----------------------------------------------------------------------------- Last Modified 2001/12/11 15:28:46 by <bidulock@openss7.org> *****************************************************************************/#ident "@(#) test-sdt.c,v SS7AlphaRelease(0.7.8.2) 2001/12/11 15:28:46"static char const ident[] = "test-sdt.c,v SS7AlphaRelease(0.7.8.2) 2001/12/11 15:28:46";/* *  This file is for testing the ss7-sdl-udp driver. */#include <sys/stropts.h>#include <sys/types.h>#include <stdlib.h>#include <unistd.h>#include <sys/ioctl.h>#include <linux/poll.h>#include <stdio.h>#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <string.h>#include <ss7/lmi.h>#include <ss7/lmi_ioctl.h>#include <ss7/devi.h>#include <ss7/devi_ioctl.h>#include <ss7/sdli.h>#include <ss7/sdli_ioctl.h>#include <ss7/sdti.h>#include <ss7/sdti_ioctl.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#define BUFSIZE 272typedef struct ppa {    struct sockaddr_in loc;    struct sockaddr_in rem;} ppa_t;void print_ppa(ppa_t *ppa) {    printf("PPA loc Address family = %d\n", ppa->loc.sin_family);    printf("PPA loc Port = %d\n", ppa->loc.sin_port);    printf("PPA loc Address = %s\n", inet_ntoa(ppa->loc.sin_addr));    printf("PPA rem Address family = %d\n", ppa->rem.sin_family);    printf("PPA rem Port = %d\n", ppa->rem.sin_port);    printf("PPA rem Address = %s\n", inet_ntoa(ppa->rem.sin_addr));}const char *lmi_strreason(unsigned int reason){    const char *r;    switch ( reason ) {        default:        case LMI_UNSPEC:         r = "Unknown or unspecified";                  break;        case LMI_BADADDRESS:     r = "Address was invalid";                     break;        case LMI_BADADDRTYPE:    r = "Invalid address type";                    break;        case LMI_BADDIAL:        r = "(not used)";                              break;        case LMI_BADDIALTYPE:    r = "(not used)";                              break;        case LMI_BADDISPOSAL:    r = "Invalid disposal parameter";              break;        case LMI_BADFRAME:       r = "Defective SDU received";                  break;        case LMI_BADPPA:         r = "Invalid PPA identifier";                  break;        case LMI_BADPRIM:        r = "Unregognized primitive";                  break;        case LMI_DISC:           r = "Disconnected";                            break;        case LMI_EVENT:          r = "Protocol-specific event ocurred";         break;        case LMI_FATALERR:       r = "Device has become unusable";              break;        case LMI_INITFAILED:     r = "Link initialization failed";              break;        case LMI_NOTSUPP:        r = "Primitive not supported by this device";  break;        case LMI_OUTSTATE:       r = "Primitive was issued from invalid state"; break;        case LMI_PROTOSHORT:     r = "M_PROTO block too short";                 break;        case LMI_SYSERR:         r = "UNIX system error";                       break;        case LMI_WRITEFAIL:      r = "Unitdata request failed";                 break;        case LMI_CRCERR:         r = "CRC or FCS error";                        break;        case LMI_DLE_EOT:        r = "DLE EOT detected";                        break;        case LMI_FORMAT:         r = "Format error detected";                   break;        case LMI_HDLC_ABORT:     r = "Aborted frame detected";                  break;        case LMI_OVERRUN:        r = "Input overrun";                           break;        case LMI_TOOSHORT:       r = "Frame too short";                         break;        case LMI_INCOMPLETE:     r = "Partial frame received";                  break;        case LMI_BUSY:           r = "Telephone was busy";                      break;        case LMI_NOANSWER:       r = "Connection went unanswered";              break;        case LMI_CALLREJECT:     r = "Connection rejected";                     break;        case LMI_HDLC_IDLE:      r = "HDLC line went idle";                     break;        case LMI_HDLC_NOTIDLE:   r = "HDLC link no longer idle";                break;        case LMI_QUIESCENT:      r = "Line being reassigned";                   break;        case LMI_RESUMED:        r = "Line has been reassigned";                break;        case LMI_DSRTIMEOUT:     r = "Did not see DSR in time";                 break;        case LMI_LAN_COLLISIONS: r = "LAN excessive collisions";                break;        case LMI_LAN_REFUSED:    r = "LAN message refused";                     break;        case LMI_LAN_NOSTATION:  r = "LAN no such station";                     break;        case LMI_LOSTCTS:        r = "Lost Clear to Send signal";               break;        case LMI_DEVERR:         r = "Start of device-specific error codes";    break;    }    return r;}void test_lmi_getmsg(int fd) {    int ret, flags;    struct strbuf ctrl;    struct strbuf data;    char cbuf[BUFSIZE];    char dbuf[BUFSIZE];    union LMI_primitives *p = (union LMI_primitives *)cbuf;    ctrl.maxlen = BUFSIZE;    ctrl.len    = 0;    ctrl.buf    = cbuf;    data.maxlen = BUFSIZE;    data.len    = 0;    data.buf    = dbuf;do_get_again:    printf("\nAttempting getmsg\n");    if ( (ret = getmsg(fd, &ctrl, &data, &flags)) < 0 ) {        printf("error = %d\n", errno);        perror(__FUNCTION__);        return;    } else        printf("Getmsg succeeded!\n");    if ( ret == 0 ) {        if ( ctrl.len > 0 ) {            switch ( p->lmi_primitive ) {                case LMI_INFO_ACK:                    {                        int ppalen = ctrl.len - sizeof(p->info_ack);                        printf("LMI_INFO_ACK:\n");                        printf("Version = 0x%08lx\n", p->info_ack.lmi_version);                        printf("State = %lu\n", p->info_ack.lmi_state);                        printf("Max sdu = %lu\n", p->info_ack.lmi_max_sdu);                        printf("Min sdu = %lu\n", p->info_ack.lmi_min_sdu);                        printf("Header len = %lu\n", p->info_ack.lmi_header_len);                        printf("PPA style = %lu\n", p->info_ack.lmi_ppa_style);                        printf("PPA length = %u\n", ppalen);                        print_ppa((ppa_t *)p->info_ack.lmi_ppa_addr);                    }                    return;                case LMI_OK_ACK:                    {                        printf("LMI_OK_ACK:\n");                        printf("Correct primitive = %lu\n", p->ok_ack.lmi_correct_primitive);                        printf("State = %lu\n", p->ok_ack.lmi_state);                    }                    return;                case LMI_ERROR_ACK:                    {                        printf("LMI_ERROR_ACK:\n");                        printf("Error number = %lu\n", p->error_ack.lmi_errno);                        printf("Error string = %s\n", strerror(p->error_ack.lmi_errno));                        printf("Reason number = %lu\n", p->error_ack.lmi_reason);                        printf("Reason string = %s\n", lmi_strreason(p->error_ack.lmi_reason));                        printf("Error primitive = %lu\n", p->error_ack.lmi_error_primitive);                        printf("State = %lu\n", p->error_ack.lmi_state);                    }                    return;                case LMI_ERROR_IND:                    {                        printf("LMI_ERROR_IND:\n");                        printf("Error number = %lu\n", p->error_ind.lmi_errno);                        printf("Error string = %s\n", strerror(p->error_ind.lmi_errno));                        printf("Reason number = %lu\n", p->error_ind.lmi_reason);                        printf("Reason string = %s\n", lmi_strreason(p->error_ind.lmi_reason));                        printf("State = %lu\n", p->error_ind.lmi_state);                    }                    goto do_get_again;                case LMI_ENABLE_CON:                    {                        printf("LMI_ENABLE_CON:\n");                        printf("State = %lu\n", p->enable_con.lmi_state);                    }                    return;                case LMI_DISABLE_CON:                    {                        printf("LMI_DISABLE_CON:\n");                        printf("State = %lu\n", p->enable_con.lmi_state);                    }                    return;                default:                    printf("Unrecognized response primitive %lu!\n", p->lmi_primitive);                    goto do_get_again;            }        }    }}void test_info_req(int fd) {    int ret;    struct strbuf ctrl;    char cbuf[BUFSIZE];    union LMI_primitives *p = (union LMI_primitives *)cbuf;    ctrl.maxlen = BUFSIZE;    ctrl.len    = sizeof(p->info_req);    ctrl.buf    = cbuf;    p->lmi_primitive = LMI_INFO_REQ;    printf("\nAttempting info request\n");    if ( (ret = putmsg(fd, &ctrl, NULL, RS_HIPRI)) < 0 ) {        printf("error = %d\n", errno);        perror(__FUNCTION__);        exit(2);    } else        printf("Putmsg succeeded!\n");    test_lmi_getmsg(fd);}void test_attach_req(int fd, ppa_t *ppap) {    int ret;    struct strbuf ctrl;    char cbuf[BUFSIZE];    union LMI_primitives *p = (union LMI_primitives *)cbuf;    ctrl.maxlen = BUFSIZE;    ctrl.len    = sizeof(p->attach_req)+sizeof(ppa_t);    ctrl.buf    = cbuf;    p->attach_req.lmi_primitive = LMI_ATTACH_REQ;    bcopy(ppap, p->attach_req.lmi_ppa, sizeof(ppa_t));    printf("\nAttempting attach request\n");    print_ppa((ppa_t *)p->attach_req.lmi_ppa);    if ( (ret = putmsg(fd, &ctrl, NULL, RS_HIPRI)) < 0 ) {        printf("error = %d\n", errno);        perror(__FUNCTION__);        exit(2);    } else        printf("Putmsg succeeded!\n");    test_lmi_getmsg(fd);}void test_detach_req(int fd) {    int ret;    struct strbuf ctrl;    char cbuf[BUFSIZE];    union LMI_primitives *p = (union LMI_primitives *)cbuf;    ctrl.maxlen = BUFSIZE;    ctrl.len    = sizeof(p->detach_req);    ctrl.buf    = cbuf;    p->lmi_primitive = LMI_DETACH_REQ;    printf("\nAttempting detach request\n");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -