FreeCalypso > hg > themwi-system-sw
annotate sip-manual-out/main.c @ 120:c62d0f28da6f
sip-manual-out: make Max-Forwards configurable
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 29 Sep 2022 14:13:43 -0800 |
parents | 056616f7e8ab |
children | 5dc0190a624e |
rev | line source |
---|---|
71
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This is the main module for sip-manual-out test program. |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 */ |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 #include <sys/types.h> |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <sys/time.h> |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <sys/socket.h> |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <sys/errno.h> |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <netinet/in.h> |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <arpa/inet.h> |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <stdio.h> |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include <stdlib.h> |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include <string.h> |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include <strings.h> |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 #include <unistd.h> |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 #include "../libsip/out_msg.h" |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 #include "../libsip/sdp.h" |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 extern int sip_socket; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 extern struct in_addr sip_bind_ip, sip_dest_ip; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 extern unsigned sip_bind_port, sip_dest_port; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 extern char sip_dest_domain[]; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 extern struct sockaddr_in dummy_rtp_endp; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 struct sockaddr_in sip_dest_sin; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 char from_uri[128], to_uri[128], call_id[128]; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 struct timeval cur_event_time; |
120
c62d0f28da6f
sip-manual-out: make Max-Forwards configurable
Mychaela Falconia <falcon@freecalypso.org>
parents:
119
diff
changeset
|
28 unsigned max_forwards = 70; |
71
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 send_invite_req() |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 { |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 struct sip_msg_out msg; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 struct sdp_gen sdp; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 int rc; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 rc = start_request_out_msg(&msg, "INVITE", to_uri); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 if (rc < 0) { |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 msg_size_err: fprintf(stderr, "composing INVITE req: msg size error\n"); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 exit(1); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 } |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 rc = add_req_boilerplate(&msg, "1 INVITE"); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 if (rc < 0) |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 goto msg_size_err; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 rc = add_contact_header(&msg); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 if (rc < 0) |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 goto msg_size_err; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 rc = out_msg_add_header(&msg, "Content-Type", "application/sdp"); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 if (rc < 0) |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 goto msg_size_err; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 bzero(&sdp, sizeof sdp); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 sdp.conn_ip = dummy_rtp_endp.sin_addr; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 sdp.conn_port = ntohs(dummy_rtp_endp.sin_port); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 sdp.codec_mask = SDP_CODEC_MASK_BOTH; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 sdp.session_id = sdp.conn_port << 16; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 sdp.owner_ip = sip_bind_ip; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 rc = out_msg_finish_sdp(&msg, &sdp); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 if (rc < 0) |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 goto msg_size_err; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 sip_tx_packet(&msg, &sip_dest_sin); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 } |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 |
119
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
62 static void |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
63 preliminary_proc(argc, argv) |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
64 char **argv; |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
65 { |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
66 extern int optind; |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
67 extern char *optarg; |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
68 char *logfile; |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
69 int opt, rc; |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
70 |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
71 logfile = 0; |
120
c62d0f28da6f
sip-manual-out: make Max-Forwards configurable
Mychaela Falconia <falcon@freecalypso.org>
parents:
119
diff
changeset
|
72 while ((opt = getopt(argc, argv, "l:m:")) != EOF) { |
119
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
73 switch (opt) { |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
74 case 'l': |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
75 logfile = optarg; |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
76 continue; |
120
c62d0f28da6f
sip-manual-out: make Max-Forwards configurable
Mychaela Falconia <falcon@freecalypso.org>
parents:
119
diff
changeset
|
77 case 'm': |
c62d0f28da6f
sip-manual-out: make Max-Forwards configurable
Mychaela Falconia <falcon@freecalypso.org>
parents:
119
diff
changeset
|
78 max_forwards = atoi(optarg); |
c62d0f28da6f
sip-manual-out: make Max-Forwards configurable
Mychaela Falconia <falcon@freecalypso.org>
parents:
119
diff
changeset
|
79 continue; |
119
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
80 default: |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
81 usage: |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
82 fprintf(stderr, |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
83 "usage: %s [options] dest-conf from-num to-num\n", |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
84 argv[0]); |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
85 exit(1); |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
86 } |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
87 } |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
88 if (argc != optind + 3) |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
89 goto usage; |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
90 read_config_file(argv[optind]); |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
91 open_sip_udp_socket(); |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
92 obtain_dummy_rtp(); |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
93 sip_dest_sin.sin_family = AF_INET; |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
94 sip_dest_sin.sin_addr = sip_dest_ip; |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
95 sip_dest_sin.sin_port = htons(sip_dest_port); |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
96 sprintf(from_uri, "<sip:%s@%s>;tag=out%u", argv[optind+1], |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
97 inet_ntoa(sip_bind_ip), ntohs(dummy_rtp_endp.sin_port)); |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
98 sprintf(to_uri, "sip:%s@%s", argv[optind+2], sip_dest_domain); |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
99 if (logfile) { |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
100 rc = open_sip_log_file(logfile); |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
101 if (rc < 0) |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
102 exit(1); /* error msg already printed */ |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
103 } |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
104 } |
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
105 |
71
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 main(argc, argv) |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 char **argv; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 { |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 fd_set fds; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 int rc; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 |
119
056616f7e8ab
sip-manual-out: convert command line to getopt style
Mychaela Falconia <falcon@freecalypso.org>
parents:
74
diff
changeset
|
112 preliminary_proc(argc, argv); |
71
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 gettimeofday(&cur_event_time, 0); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 sprintf(call_id, "%08u_%u@%s", |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 (unsigned)(cur_event_time.tv_sec % 100000000), |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 ntohs(dummy_rtp_endp.sin_port), inet_ntoa(sip_bind_ip)); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 send_invite_req(); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 /* main select loop */ |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 for (;;) { |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 FD_ZERO(&fds); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 FD_SET(sip_socket, &fds); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 rc = select(sip_socket+1, &fds, 0, 0, 0); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 if (rc < 0) { |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 if (errno == EINTR) |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 continue; |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 perror("select"); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 exit(1); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 } |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 gettimeofday(&cur_event_time, 0); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 if (FD_ISSET(sip_socket, &fds)) |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 sip_socket_select(); |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 } |
d74b545a3c2a
sip-manual-out: new test program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 } |