Hex Artifact Content

Artifact 59a5b1db0bef61640dee2c32a34fa3f728e4bd22:


0000: 23 69 6e 63 6c 75 64 65 20 22 70 61 63 6b 65 74  #include "packet
0010: 62 6c 5f 67 65 74 73 74 61 74 2e 68 22 0a 23 69  bl_getstat.h".#i
0020: 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 79 70 65  nclude <sys/type
0030: 73 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  s.h>.#include <s
0040: 79 73 2f 73 6f 63 6b 65 74 2e 68 3e 0a 23 69 6e  ys/socket.h>.#in
0050: 63 6c 75 64 65 20 3c 73 79 73 2f 75 6e 2e 68 3e  clude <sys/un.h>
0060: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f  .#include <stdio
0070: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
0080: 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  dlib.h>.#include
0090: 20 3c 75 6e 69 73 74 64 2e 68 3e 0a 23 69 6e 63   <unistd.h>.#inc
00a0: 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a  lude <string.h>.
00b0: 0a 69 6e 74 20 6d 61 69 6e 28 69 6e 74 20 61 72  .int main(int ar
00c0: 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 29  gc, char **argv)
00d0: 20 7b 0a 0a 23 69 66 64 65 66 20 55 53 45 5f 53   {..#ifdef USE_S
00e0: 4f 43 4b 53 54 41 54 0a 09 73 74 72 75 63 74 20  OCKSTAT..struct 
00f0: 73 6f 63 6b 61 64 64 72 5f 75 6e 20 73 6f 63 6b  sockaddr_un sock
0100: 69 6e 66 6f 3b 0a 09 63 68 61 72 20 2a 73 6f 63  info;..char *soc
0110: 6b 65 74 70 61 74 68 20 3d 20 53 4f 43 4b 53 54  ketpath = SOCKST
0120: 41 54 5f 50 41 54 48 3b 0a 09 63 68 61 72 20 62  AT_PATH;..char b
0130: 75 66 5b 31 30 32 34 5d 3b 0a 09 69 6e 74 20 73  uf[1024];..int s
0140: 6f 63 6b 66 64 3b 0a 09 69 6e 74 20 63 6f 6e 6e  ockfd;..int conn
0150: 65 63 74 72 65 74 3b 0a 09 73 73 69 7a 65 5f 74  ectret;..ssize_t
0160: 20 72 65 61 64 72 65 74 3b 0a 0a 09 2f 2a 20 50   readret;.../* P
0170: 72 6f 63 65 73 73 20 63 6f 6d 6d 61 6e 64 20 6c  rocess command l
0180: 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 2c 20 69  ine arguments, i
0190: 66 20 61 6e 79 2e 20 2a 2f 0a 09 69 66 20 28 61  f any. */..if (a
01a0: 72 67 63 20 3e 20 31 29 20 7b 0a 09 09 69 66 20  rgc > 1) {...if 
01b0: 28 61 72 67 76 5b 31 5d 20 21 3d 20 4e 55 4c 4c  (argv[1] != NULL
01c0: 29 20 7b 0a 09 09 09 73 6f 63 6b 65 74 70 61 74  ) {....socketpat
01d0: 68 20 3d 20 61 72 67 76 5b 31 5d 3b 0a 09 09 7d  h = argv[1];...}
01e0: 0a 09 7d 0a 0a 09 2f 2a 20 43 72 65 61 74 65 20  ..}.../* Create 
01f0: 61 20 55 4e 49 58 20 64 6f 6d 61 69 6e 20 73 6f  a UNIX domain so
0200: 63 6b 65 74 2e 20 2a 2f 0a 09 73 6f 63 6b 66 64  cket. */..sockfd
0210: 20 3d 20 73 6f 63 6b 65 74 28 50 46 5f 55 4e 49   = socket(PF_UNI
0220: 58 2c 20 53 4f 43 4b 5f 53 54 52 45 41 4d 2c 20  X, SOCK_STREAM, 
0230: 30 29 3b 0a 09 69 66 20 28 73 6f 63 6b 66 64 20  0);..if (sockfd 
0240: 3c 20 30 29 20 7b 0a 09 09 70 65 72 72 6f 72 28  < 0) {...perror(
0250: 22 73 6f 63 6b 65 74 22 29 3b 0a 09 09 65 78 69  "socket");...exi
0260: 74 28 45 58 49 54 5f 46 41 49 4c 55 52 45 29 3b  t(EXIT_FAILURE);
0270: 0a 09 7d 0a 0a 09 2f 2a 20 43 6f 6e 6e 65 63 74  ..}.../* Connect
0280: 20 74 6f 20 6f 75 72 20 70 72 65 64 65 74 65 72   to our predeter
0290: 6d 69 6e 65 64 20 73 6f 63 6b 65 74 2e 20 2a 2f  mined socket. */
02a0: 0a 09 73 6f 63 6b 69 6e 66 6f 2e 73 75 6e 5f 66  ..sockinfo.sun_f
02b0: 61 6d 69 6c 79 20 3d 20 41 46 5f 55 4e 49 58 3b  amily = AF_UNIX;
02c0: 0a 09 73 74 72 6e 63 70 79 28 73 6f 63 6b 69 6e  ..strncpy(sockin
02d0: 66 6f 2e 73 75 6e 5f 70 61 74 68 2c 20 73 6f 63  fo.sun_path, soc
02e0: 6b 65 74 70 61 74 68 2c 20 73 69 7a 65 6f 66 28  ketpath, sizeof(
02f0: 73 6f 63 6b 69 6e 66 6f 2e 73 75 6e 5f 70 61 74  sockinfo.sun_pat
0300: 68 29 29 3b 0a 0a 09 63 6f 6e 6e 65 63 74 72 65  h));...connectre
0310: 74 20 3d 20 63 6f 6e 6e 65 63 74 28 73 6f 63 6b  t = connect(sock
0320: 66 64 2c 20 28 73 74 72 75 63 74 20 73 6f 63 6b  fd, (struct sock
0330: 61 64 64 72 20 2a 29 20 26 73 6f 63 6b 69 6e 66  addr *) &sockinf
0340: 6f 2c 20 73 69 7a 65 6f 66 28 73 6f 63 6b 69 6e  o, sizeof(sockin
0350: 66 6f 29 29 3b 0a 09 69 66 20 28 63 6f 6e 6e 65  fo));..if (conne
0360: 63 74 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 70  ctret < 0) {...p
0370: 65 72 72 6f 72 28 22 63 6f 6e 6e 65 63 74 22 29  error("connect")
0380: 3b 0a 09 09 65 78 69 74 28 45 58 49 54 5f 46 41  ;...exit(EXIT_FA
0390: 49 4c 55 52 45 29 3b 0a 09 7d 0a 0a 09 2f 2a 20  ILURE);..}.../* 
03a0: 52 65 61 64 20 61 6c 6c 20 74 68 65 20 64 61 74  Read all the dat
03b0: 61 20 61 76 61 69 6c 61 62 6c 65 2e 20 2a 2f 0a  a available. */.
03c0: 09 77 68 69 6c 65 20 28 31 29 20 7b 0a 09 09 72  .while (1) {...r
03d0: 65 61 64 72 65 74 20 3d 20 72 65 61 64 28 73 6f  eadret = read(so
03e0: 63 6b 66 64 2c 20 62 75 66 2c 20 73 69 7a 65 6f  ckfd, buf, sizeo
03f0: 66 28 62 75 66 29 29 3b 0a 09 09 69 66 20 28 72  f(buf));...if (r
0400: 65 61 64 72 65 74 20 3c 3d 20 30 29 20 62 72 65  eadret <= 0) bre
0410: 61 6b 3b 0a 09 09 77 72 69 74 65 28 53 54 44 4f  ak;...write(STDO
0420: 55 54 5f 46 49 4c 45 4e 4f 2c 20 62 75 66 2c 20  UT_FILENO, buf, 
0430: 72 65 61 64 72 65 74 29 3b 0a 09 7d 0a 0a 09 2f  readret);..}.../
0440: 2a 20 41 6c 6c 20 64 6f 6e 65 21 20 2a 2f 0a 09  * All done! */..
0450: 63 6c 6f 73 65 28 73 6f 63 6b 66 64 29 3b 0a 0a  close(sockfd);..
0460: 09 72 65 74 75 72 6e 20 30 3b 0a 23 65 6c 73 65  .return 0;.#else
0470: 0a 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72  ..fprintf(stderr
0480: 2c 20 22 50 61 63 6b 65 74 42 4c 20 77 61 73 20  , "PacketBL was 
0490: 6e 6f 74 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  not compiled wit
04a0: 68 20 73 6f 63 6b 65 74 20 73 74 61 74 69 73 74  h socket statist
04b0: 69 63 73 20 73 75 70 70 6f 72 74 21 5c 6e 22 29  ics support!\n")
04c0: 3b 0a 09 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e  ;..return 1;.#en
04d0: 64 69 66 0a 7d 0a                                dif.}.