aboutsummaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-07-15 18:42:49 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-07-15 18:42:49 +0200
commit2fed3d988fb48e5929b7c3da3695f0ed86a7e79e (patch)
treef4d5dbfc8a976bb409416e5cdf5be948a48ede2b /misc
parenta23b9760e692574a8a5b431e4c79f52019528e4f (diff)
Indent
Diffstat (limited to 'misc')
-rw-r--r--misc/tde.c360
1 files changed, 197 insertions, 163 deletions
diff --git a/misc/tde.c b/misc/tde.c
index 4ca085f..1aefa82 100644
--- a/misc/tde.c
+++ b/misc/tde.c
@@ -15,93 +15,102 @@
/* Определяем порт и адрес АТС. */
#define PORTNUM 33333
#define SERVER "192.168.0.101"
+
int s;
int write_out(const void *buffer, size_t size, void *app_key);
typedef struct buffer_s {
- char *buf;
- int len;
+ char *buf;
+ int len;
} buffer_t;
-void parseEventReport(char *data, int length)
+void
+parseEventReport(char *data, int length)
{
- CSTAEventReportArgument_t *rep = 0; /* Type to decode */
- asn_dec_rval_t rval; /* Decoder return value */
- size_t size; /* Number of bytes read */
+ CSTAEventReportArgument_t *rep = 0; /* Type to decode */
+ asn_dec_rval_t rval; /* Decoder return value */
+ size_t size; /* Number of bytes read */
/* Decode the input buffer */
rval = ber_decode(0, &asn_DEF_CSTAEventReportArgument,
- (void **)&rep, data, length);
- if(rval.code != RC_OK)
- fprintf(stderr, "Broken encoding at byte %ld\n", (long)rval.consumed);
+ (void **) &rep, data, length);
+ if (rval.code != RC_OK)
+ fprintf(stderr, "Broken encoding at byte %ld\n",
+ (long) rval.consumed);
/* Print the decoded Rectangle type as XML */
xer_fprint(stdout, &asn_DEF_CSTAEventReportArgument, rep);
- return 0; /* Decoding finished successfully */
+ return 0; /* Decoding finished successfully */
}
-void dump(unsigned char *buf, int len) {
- int i, j;
-
- for (i = 0; i < len; i+=16) {
- for (j = 0; j < 16; j++)
- if (i+j < len)
- printf("%02X ", (unsigned char)buf[i+j]);
- else
- printf(" ");
- for (j = 0; j < 16; j++)
- if (i+j < len) {
- if (buf[i+j] >= 0x20)
- printf("%c", (unsigned char)buf[i+j]);
- else
- printf(".");
- }
- printf("\n");
- }
+void
+dump(unsigned char *buf, int len)
+{
+ int i, j;
+
+ for (i = 0; i < len; i += 16) {
+ for (j = 0; j < 16; j++)
+ if (i + j < len)
+ printf("%02X ", (unsigned char) buf[i + j]);
+ else
+ printf(" ");
+ for (j = 0; j < 16; j++)
+ if (i + j < len) {
+ if (buf[i + j] >= 0x20)
+ printf("%c",
+ (unsigned char) buf[i + j]);
+ else
+ printf(".");
+ }
+ printf("\n");
+ }
}
-void *memmem(const void *haystack, size_t haystacklen,
- const void *needle, size_t needlelen)
+void *
+memmem(const void *haystack, size_t haystacklen,
+ const void *needle, size_t needlelen)
{
- register const char *pn;
- register const char *ph;
- const char *plast;
- size_t n;
-
- if (needlelen == 0) {
- return (void *) haystack;
- }
-
- if (haystacklen >= needlelen) {
- ph = (const char *) haystack;
- pn = (const char *) needle;
- plast = ph + (haystacklen - needlelen);
-
- do {
- n = 0;
- while (ph[n] == pn[n]) {
- if (++n == needlelen) {
- return (void *) ph;
- }
- }
- } while (++ph <= plast);
- }
-
- return NULL;
+ register const char *pn;
+ register const char *ph;
+ const char *plast;
+ size_t n;
+
+ if (needlelen == 0) {
+ return (void *) haystack;
+ }
+
+ if (haystacklen >= needlelen) {
+ ph = (const char *) haystack;
+ pn = (const char *) needle;
+ plast = ph + (haystacklen - needlelen);
+
+ do {
+ n = 0;
+ while (ph[n] == pn[n]) {
+ if (++n == needlelen) {
+ return (void *) ph;
+ }
+ }
+ } while (++ph <= plast);
+ }
+
+ return NULL;
}
#define READ 0
#define WRITE 1
-void timestamp(int dir)
+void
+timestamp(int dir)
{
- time_t t;
+ time_t t;
struct tm *l;
t = time(NULL);
l = localtime(&t);
- printf("\n[%02d:%02d:%02d %02d.%02d.%4d] ", l->tm_hour, l->tm_min, l->tm_sec, l->tm_mday, l->tm_mon+1, l->tm_year+1900);
+ printf("\n[%02d:%02d:%02d %02d.%02d.%4d] ", l->tm_hour, l->tm_min,
+ l->tm_sec, l->tm_mday, l->tm_mon + 1, l->tm_year + 1900);
if (dir == READ)
printf("---- PBX -> PC ----\n");
@@ -109,15 +118,16 @@ void timestamp(int dir)
printf("---- PC -> PBX ----\n");
}
-void pktdump(char *buf, int len)
+void
+pktdump(char *buf, int len)
{
- int i, j;
- char id[256], *cp, type, tmp[256], *c, *orig;
- long seq, l, origlen;
- CSTAapdu_t *apdu = 0; /* Type to decode */
+ int i, j;
+ char id[256], *cp, type, tmp[256], *c, *orig;
+ long seq, l, origlen;
+ CSTAapdu_t *apdu = 0; /* Type to decode */
RORSapdu_t *rors;
- asn_dec_rval_t rval; /* Decoder return value */
- size_t size; /* Number of bytes read */
+ asn_dec_rval_t rval; /* Decoder return value */
+ size_t size; /* Number of bytes read */
buffer_t *out;
buf += 2;
@@ -125,70 +135,80 @@ void pktdump(char *buf, int len)
timestamp(READ);
/* Decode the input buffer */
- rval = ber_decode(0, &asn_DEF_CSTAapdu, (void **)&apdu, buf, len);
- if(rval.code != RC_OK) {
- fprintf(stderr, "Broken encoding at byte %ld\n", (long)rval.consumed);
+ rval = ber_decode(0, &asn_DEF_CSTAapdu, (void **) &apdu, buf, len);
+ if (rval.code != RC_OK) {
+ fprintf(stderr, "Broken encoding at byte %ld\n",
+ (long) rval.consumed);
return 1;
}
switch (apdu->present) {
- case CSTAapdu_PR_svcRequest:
- printf("invokeID %d, serviceID %d\n", apdu->choice.svcRequest.invokeID, apdu->choice.svcRequest.serviceID);
- switch (apdu->choice.svcRequest.serviceID) {
- case 211:
- printf("SystemStatus Request\n");
- //send SystemStatus responce
- rors = calloc(1, sizeof(RORSapdu_t));
- rors->invokeID = apdu->choice.svcRequest.invokeID;
- rors->result.serviceID = apdu->choice.svcRequest.serviceID;
-
- out = calloc(1, sizeof(buffer_t));
- out->buf = malloc(1024);
- der_encode(&asn_DEF_RORSapdu, rors, write_out, out);
- timestamp(WRITE);
- printf("invokeID %d, serviceID %d\n", rors->invokeID, rors->result.serviceID);
- printf("SystemStatus Responce\n");
- //xer_fprint(stdout, &asn_DEF_RORSapdu, rors);
-
- memmove(out->buf+2, out->buf, out->len);
- out->buf[0] = 0x00;
- out->buf[1] = out->len;
- out->len += 2;
- send(s, out->buf, out->len, 0);
- free(out->buf);
- break;
- case CSTAServices_cSTAeventReportSID:
- parseEventReport(apdu->choice.svcRequest.serviceArgs.buf, apdu->choice.svcRequest.serviceArgs.size);
- break;
- default:
- printf("Unknown svcRequest:\n");
- dump(apdu->choice.svcRequest.serviceArgs.buf, apdu->choice.svcRequest.serviceArgs.size);
- break;
- }
+ case CSTAapdu_PR_svcRequest:
+ printf("invokeID %d, serviceID %d\n",
+ apdu->choice.svcRequest.invokeID,
+ apdu->choice.svcRequest.serviceID);
+ switch (apdu->choice.svcRequest.serviceID) {
+ case 211:
+ printf("SystemStatus Request\n");
+ // send SystemStatus responce
+ rors = calloc(1, sizeof(RORSapdu_t));
+ rors->invokeID = apdu->choice.svcRequest.invokeID;
+ rors->result.serviceID =
+ apdu->choice.svcRequest.serviceID;
+
+ out = calloc(1, sizeof(buffer_t));
+ out->buf = malloc(1024);
+ der_encode(&asn_DEF_RORSapdu, rors, write_out, out);
+ timestamp(WRITE);
+ printf("invokeID %d, serviceID %d\n", rors->invokeID,
+ rors->result.serviceID);
+ printf("SystemStatus Responce\n");
+ // xer_fprint(stdout, &asn_DEF_RORSapdu, rors);
+
+ memmove(out->buf + 2, out->buf, out->len);
+ out->buf[0] = 0x00;
+ out->buf[1] = out->len;
+ out->len += 2;
+ send(s, out->buf, out->len, 0);
+ free(out->buf);
+ break;
+ case CSTAServices_cSTAeventReportSID:
+ parseEventReport(apdu->choice.svcRequest.
+ serviceArgs.buf,
+ apdu->choice.svcRequest.serviceArgs.size);
break;
- case CSTAapdu_PR_svcResult:
- case CSTAapdu_PR_svcError:
- case CSTAapdu_PR_svcReject:
default:
- xer_fprint(stdout, &asn_DEF_CSTAapdu, apdu);
+ printf("Unknown svcRequest:\n");
+ dump(apdu->choice.svcRequest.serviceArgs.buf,
+ apdu->choice.svcRequest.serviceArgs.size);
break;
+ }
+ break;
+ case CSTAapdu_PR_svcResult:
+ case CSTAapdu_PR_svcError:
+ case CSTAapdu_PR_svcReject:
+ default:
+ xer_fprint(stdout, &asn_DEF_CSTAapdu, apdu);
+ break;
}
}
-int write_out(const void *buffer, size_t size, void *app_key)
+int
+write_out(const void *buffer, size_t size, void *app_key)
{
buffer_t *dest = app_key;
u_char *buf = buffer;
int i;
for (i = 0; i < size; i++)
- dest->buf[dest->len+i] = buf[i];
+ dest->buf[dest->len + i] = buf[i];
dest->len += size;
return 0;
}
int sendID = 1;
-void start_monitor(char *numer)
+void
+start_monitor(char *numer)
{
ROIVapdu_t *pdu;
MonitorStartArgument_t *rep;
@@ -197,9 +217,12 @@ void start_monitor(char *numer)
rep = calloc(1, sizeof(MonitorStartArgument_t));
rep->monitorObject.present = CSTAObject_PR_deviceObject;
- rep->monitorObject.choice.deviceObject.deviceIdentifier.present = DeviceID__deviceIdentifier_PR_dialingNumber;
- rep->monitorObject.choice.deviceObject.deviceIdentifier.choice.dialingNumber.buf = numer;
- rep->monitorObject.choice.deviceObject.deviceIdentifier.choice.dialingNumber.size = strlen(numer);
+ rep->monitorObject.choice.deviceObject.deviceIdentifier.present =
+ DeviceID__deviceIdentifier_PR_dialingNumber;
+ rep->monitorObject.choice.deviceObject.deviceIdentifier.
+ choice.dialingNumber.buf = numer;
+ rep->monitorObject.choice.deviceObject.deviceIdentifier.
+ choice.dialingNumber.size = strlen(numer);
pdu = calloc(1, sizeof(ROIVapdu_t));
pdu->invokeID = sendID++;
@@ -218,7 +241,7 @@ void start_monitor(char *numer)
timestamp(WRITE);
xer_fprint(stdout, &asn_DEF_MonitorStartArgument, rep);
- memmove(buf->buf+2, buf->buf, buf->len);
+ memmove(buf->buf + 2, buf->buf, buf->len);
buf->buf[0] = 0x00;
buf->buf[1] = buf->len;
buf->len += 2;
@@ -226,85 +249,96 @@ void start_monitor(char *numer)
free(buf->buf);
free(pdu->serviceArgs.buf);
- //read_pkt();
+ // read_pkt();
}
-int read_pkt(int s, unsigned char *buf)
+int
+read_pkt(int s, unsigned char *buf)
{
- int nbytes, total = 0, length;
- while (total < 2 )
- {
- nbytes = recv( s, &buf[total], 2-total, 0);
- if (nbytes == 0) return 0; // соединение закрыто удаленно
- if (nbytes < 0 ) return -1;// ошибка чтения из сокета
+ int nbytes, total = 0, length;
+ while (total < 2) {
+ nbytes = recv(s, &buf[total], 2 - total, 0);
+ if (nbytes == 0)
+ return 0; // соединение закрыто удаленно
+ if (nbytes < 0)
+ return -1; // ошибка чтения из сокета
total += nbytes;
}
- if (buf[0] != 0) return -2; // испорченный пакет
- if (buf[1] == 0) return 2; // прочли 2 байта - пустой пакет
+ if (buf[0] != 0)
+ return -2; // испорченный пакет
+ if (buf[1] == 0)
+ return 2; // прочли 2 байта - пустой пакет
length = ((unsigned char *) buf)[1] + 2;
- while (total < length)
- {
- nbytes = recv( s, &buf[total], length - total, 0);
- if (nbytes == 0) return 0; // соединение закрыто удаленно
- if (nbytes < 0 ) return -1; // ошибка чтения из сокета
+ while (total < length) {
+ nbytes = recv(s, &buf[total], length - total, 0);
+ if (nbytes == 0)
+ return 0; // соединение закрыто удаленно
+ if (nbytes < 0)
+ return -1; // ошибка чтения из сокета
total += nbytes;
}
return total;
}
-main(argc,argv)
- int argc;
- char *argv[];
+
+main(argc, argv)
+ int argc;
+ char *argv[];
{
int nbytes;
int pid;
int nport;
- /* Начало программы. */
+ /* Начало программы. */
struct sockaddr_in serv_addr;
- unsigned char buf[242]={0x00, 0x25, 0x60, 0x23, 0x80, 0x02, 0x07, 0x80, 0xA1, 0x07, 0x06, 0x05, 0x2B, 0x0C, 0x00, 0x81, 0x5A, 0xBE, 0x14, 0x28, 0x12, 0x06, 0x07, 0x2B, 0x0C, 0x00, 0x82, 0x1D, 0x81, 0x48, 0xA0, 0x07, 0xA0, 0x05, 0x03, 0x03, 0x00, 0x08, 0x00};
+ unsigned char buf[242] =
+ { 0x00, 0x25, 0x60, 0x23, 0x80, 0x02, 0x07, 0x80, 0xA1, 0x07, 0x06,
+ 0x05, 0x2B, 0x0C, 0x00, 0x81, 0x5A, 0xBE, 0x14, 0x28, 0x12,
+ 0x06, 0x07, 0x2B, 0x0C, 0x00, 0x82, 0x1D, 0x81, 0x48, 0xA0,
+ 0x07, 0xA0, 0x05, 0x03, 0x03, 0x00, 0x08, 0x00
+ };
int addrlen;
unsigned long addr;
- nport=htons((u_short)PORTNUM);
+ nport = htons((u_short) PORTNUM);
- if( (s=socket(AF_INET, SOCK_STREAM, 0) ) == -1 ) {
+ if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("Error calling socket()");
return 1;
}
- /* В serv_addr заносим адрес и порт АТС. */
+ /* В serv_addr заносим адрес и порт АТС. */
bzero(&serv_addr, sizeof(serv_addr));
- serv_addr.sin_family=AF_INET;
- serv_addr.sin_addr.s_addr=inet_addr(SERVER);
- serv_addr.sin_port=nport;
+ serv_addr.sin_family = AF_INET;
+ serv_addr.sin_addr.s_addr = inet_addr(SERVER);
+ serv_addr.sin_port = nport;
- if( connect(s, (struct sockaddr *)&serv_addr, sizeof(serv_addr) ) == -1) {
+ if (connect(s, (struct sockaddr *) &serv_addr,
+ sizeof(serv_addr)) == -1) {
perror("Error calling connect()");
return 1;
- }
-
-//посылаем #A-ASSOCIATE Request
-// dump(buf, 39);
- send(s, buf, 39, 0);
+ }
+ // посылаем #A-ASSOCIATE Request
+ // dump(buf, 39);
+ send(s, buf, 39, 0);
- // Получаем ответ от АТС.
- nbytes=recv(s, buf, sizeof(buf), 0);
- // printf("%d", nbytes)
- dump(buf, nbytes);
+ // Получаем ответ от АТС.
+ nbytes = recv(s, buf, sizeof(buf), 0);
+ // printf("%d", nbytes)
+ dump(buf, nbytes);
- if (nbytes<0) {
+ if (nbytes < 0) {
perror("Error calling recv()");
return 1;
- }
- //проверяем на rejected-permanent
- const unsigned char seek[] = {0xA2, 0x03, 0x02, 0x01, 0x01};
- unsigned char *off_ptr = memmem (buf, sizeof(buf), seek, sizeof(seek));
- if (off_ptr) {
+ }
+ // проверяем на rejected-permanent
+ const unsigned char seek[] = { 0xA2, 0x03, 0x02, 0x01, 0x01 };
+ unsigned char *off_ptr = memmem(buf, sizeof(buf), seek, sizeof(seek));
+ if (off_ptr) {
printf("rejected-permanent\n");
close(s);
return 0;
- }
- //шлём #StartMonitor
+ }
+ // шлём #StartMonitor
start_monitor("101");
start_monitor("102");
start_monitor("111");
@@ -313,18 +347,18 @@ main(argc,argv)
start_monitor("114");
start_monitor("115");
- while (1) { //цикл
- nbytes = read_pkt (s, buf);
- if (nbytes<0) {
+ while (1) { //цикл
+ nbytes = read_pkt(s, buf);
+ if (nbytes < 0) {
perror("Error calling recv()");
return 1;
- } else if (nbytes==0) {
+ } else if (nbytes == 0) {
printf("socket closed\n");
return 1;
}
- // dump(buf, nbytes);
+ // dump(buf, nbytes);
pktdump(buf, nbytes);
}
- close(s);
- return 0;
+ close(s);
+ return 0;
}