UPnP 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,1028 @@
1
+ require 'test/unit'
2
+
3
+ module UPnP
4
+
5
+ module OpenStub
6
+ FILES = {}
7
+
8
+ def open(path)
9
+ if URI::Generic === path or path =~ /^http:/ then
10
+ UPnP::OpenStub::FILES[path] or raise "#{path} not found"
11
+ else
12
+ super
13
+ end
14
+ end
15
+ end
16
+
17
+ module Control; end
18
+
19
+ class Control::Device
20
+ extend UPnP::OpenStub
21
+ include UPnP::OpenStub
22
+ end
23
+
24
+ class Control::Service
25
+ extend UPnP::OpenStub
26
+ include UPnP::OpenStub
27
+ end
28
+
29
+ class FakeSocket
30
+
31
+ attr_accessor :bound, :sent, :socket_options
32
+
33
+ def initialize(*data)
34
+ @bound = nil
35
+ @data = data
36
+ @sent = []
37
+ @socket_options = []
38
+ @closed = false
39
+ end
40
+
41
+ def bind(*args)
42
+ @bound = args
43
+ end
44
+
45
+ def close
46
+ @closed = true
47
+ end
48
+
49
+ def closed?
50
+ @closed
51
+ end
52
+
53
+ def recvfrom(length)
54
+ raise 'no more data in socket' if @data.empty?
55
+ [@data.shift]
56
+ end
57
+
58
+ def setsockopt(*args)
59
+ @socket_options << args
60
+ end
61
+
62
+ def send(*args)
63
+ @sent << args
64
+ end
65
+
66
+ end
67
+
68
+ class TestCase < Test::Unit::TestCase
69
+
70
+ def teardown
71
+ UPnP::OpenStub::FILES.clear
72
+ end
73
+
74
+ def util_search_response
75
+ <<-SEARCH_RESPONSE
76
+ HTTP/1.1 200 OK\r
77
+ CACHE-CONTROL: max-age = 10\r
78
+ EXT:\r
79
+ LOCATION: http://example.com/root_device.xml\r
80
+ SERVER: OS/5 UPnP/1.0 product/7\r
81
+ ST: upnp:rootdevice\r
82
+ USN: uuid:BOGUS::upnp:rootdevice\r
83
+ \r
84
+ SEARCH_RESPONSE
85
+ end
86
+
87
+ def util_notify
88
+ <<-NOTIFY
89
+ NOTIFY * HTTP/1.1\r
90
+ HOST: 239.255.255.250:1900\r
91
+ CACHE-CONTROL: max-age = 10\r
92
+ LOCATION: http://example.com/root_device.xml\r
93
+ NT: upnp:rootdevice\r
94
+ NTS: ssdp:alive\r
95
+ SERVER: OS/5 UPnP/1.0 product/7\r
96
+ USN: uuid:BOGUS::upnp:rootdevice\r
97
+ \r
98
+ NOTIFY
99
+ end
100
+
101
+ def util_notify_byebye
102
+ <<-NOTIFY_BYEBYE
103
+ NOTIFY * HTTP/1.1\r
104
+ HOST: 239.255.255.250:1900\r
105
+ NT: upnp:rootdevice\r
106
+ NTS: ssdp:byebye \r
107
+ USN: uuid:BOGUS::upnp:rootdevice\r
108
+ \r
109
+ NOTIFY_BYEBYE
110
+ end
111
+
112
+ undef_method :default_test
113
+
114
+ IGD_XML = <<-XML
115
+ <?xml version="1.0"?>
116
+ <root xmlns="urn:schemas-upnp-org:device-1-0">
117
+ <specVersion>
118
+ <major>1</major>
119
+ <minor>0</minor>
120
+ </specVersion>
121
+ <device>
122
+ <deviceType>urn:schemas-upnp-org:device:InternetGatewayDevice:1</deviceType>
123
+ <friendlyName>FreeBSD router</friendlyName>
124
+ <manufacturer>FreeBSD</manufacturer>
125
+ <manufacturerURL>http://www.freebsd.org/</manufacturerURL>
126
+ <modelDescription>FreeBSD router</modelDescription>
127
+ <modelName>FreeBSD router</modelName>
128
+ <modelNumber>1</modelNumber>
129
+ <modelURL>http://www.freebsd.org/</modelURL>
130
+ <serialNumber>00000000</serialNumber>
131
+ <UDN>uuid:ed56cff8-7d4e-11dc-b7db-000024c4931c</UDN>
132
+ <serviceList>
133
+ <service>
134
+ <serviceType>urn:schemas-upnp-org:service:Layer3Forwarding:1</serviceType>
135
+ <serviceId>urn:upnp-org:serviceId:Layer3Forwarding1</serviceId>
136
+ <controlURL>/ctl/L3F</controlURL>
137
+ <eventSubURL>/evt/L3F</eventSubURL>
138
+ <SCPDURL>/L3F.xml</SCPDURL>
139
+ </service>
140
+ </serviceList>
141
+ <deviceList>
142
+ <device>
143
+ <deviceType>urn:schemas-upnp-org:device:WANDevice:1</deviceType>
144
+ <friendlyName>WANDevice</friendlyName>
145
+ <manufacturer>MiniUPnP</manufacturer>
146
+ <manufacturerURL>http://miniupnp.free.fr/</manufacturerURL>
147
+ <modelDescription>WAN Device</modelDescription>
148
+ <modelName>WAN Device</modelName>
149
+ <modelNumber>20070827</modelNumber>
150
+ <modelURL>http://miniupnp.free.fr/</modelURL>
151
+ <serialNumber>00000000</serialNumber>
152
+ <UDN>uuid:ed56cff8-7d4e-11dc-b7db-000024c4931c</UDN>
153
+ <UPC>MINIUPNPD</UPC>
154
+ <serviceList>
155
+ <service>
156
+ <serviceType>urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1</serviceType>
157
+ <serviceId>urn:upnp-org:serviceId:WANCommonIFC1</serviceId>
158
+ <controlURL>/ctl/CmnIfCfg</controlURL>
159
+ <eventSubURL>/evt/CmnIfCfg</eventSubURL>
160
+ <SCPDURL>/WANCfg.xml</SCPDURL>
161
+ </service>
162
+ </serviceList>
163
+ <deviceList>
164
+ <device>
165
+ <deviceType>urn:schemas-upnp-org:device:WANConnectionDevice:1</deviceType>
166
+ <friendlyName>WANConnectionDevice</friendlyName>
167
+ <manufacturer>MiniUPnP</manufacturer>
168
+ <manufacturerURL>http://miniupnp.free.fr/</manufacturerURL>
169
+ <modelDescription>MiniUPnP daemon</modelDescription>
170
+ <modelName>MiniUPnPd</modelName>
171
+ <modelNumber>20070827</modelNumber>
172
+ <modelURL>http://miniupnp.free.fr/</modelURL>
173
+ <serialNumber>00000000</serialNumber>
174
+ <UDN>uuid:ed56cff8-7d4e-11dc-b7db-000024c4931c</UDN>
175
+ <UPC>MINIUPNPD</UPC>
176
+ <serviceList>
177
+ <service>
178
+ <serviceType>urn:schemas-upnp-org:service:WANIPConnection:1</serviceType>
179
+ <serviceId>urn:upnp-org:serviceId:WANIPConn1</serviceId>
180
+ <controlURL>/ctl/IPConn</controlURL>
181
+ <eventSubURL>/evt/IPConn</eventSubURL>
182
+ <SCPDURL>/WANIPCn.xml</SCPDURL>
183
+ </service>
184
+ </serviceList>
185
+ </device>
186
+ </deviceList>
187
+ </device>
188
+ </deviceList>
189
+ <presentationURL>http://127.0.0.2/</presentationURL>
190
+ </device>
191
+ </root>
192
+ XML
193
+
194
+ L3F_XML = <<-XML
195
+ <?xml version="1.0"?>
196
+ <scpd xmlns="urn:schemas-upnp-org:service-1-0">
197
+ <specVersion>
198
+ <major>1</major>
199
+ <minor>0</minor>
200
+ </specVersion>
201
+ <actionList>
202
+ <action>
203
+ <name>AddPortMapping</name>
204
+ <argumentList>
205
+ <argument>
206
+ <name>NewRemoteHost</name>
207
+ <direction>in</direction>
208
+ <relatedStateVariable>RemoteHost</relatedStateVariable>
209
+ </argument>
210
+ <argument>
211
+ <name>NewExternalPort</name>
212
+ <direction>in</direction>
213
+ <relatedStateVariable>ExternalPort</relatedStateVariable>
214
+ </argument>
215
+ <argument>
216
+ <name>NewProtocol</name>
217
+ <direction>in</direction>
218
+ <relatedStateVariable>PortMappingProtocol</relatedStateVariable>
219
+ </argument>
220
+ <argument>
221
+ <name>NewInternalPort</name>
222
+ <direction>in</direction>
223
+ <relatedStateVariable>InternalPort</relatedStateVariable>
224
+ </argument>
225
+ <argument>
226
+ <name>NewInternalClient</name>
227
+ <direction>in</direction>
228
+ <relatedStateVariable>InternalClient</relatedStateVariable>
229
+ </argument>
230
+ <argument>
231
+ <name>NewEnabled</name>
232
+ <direction>in</direction>
233
+ <relatedStateVariable>PortMappingEnabled</relatedStateVariable>
234
+ </argument>
235
+ <argument>
236
+ <name>NewPortMappingDescription</name>
237
+ <direction>in</direction>
238
+ <relatedStateVariable>PortMappingDescription</relatedStateVariable>
239
+ </argument>
240
+ <argument>
241
+ <name>NewLeaseDuration</name>
242
+ <direction>in</direction>
243
+ <relatedStateVariable>PortMappingLeaseDuration</relatedStateVariable>
244
+ </argument>
245
+ </argumentList>
246
+ </action>
247
+ <action>
248
+ <name>GetExternalIPAddress</name>
249
+ <argumentList>
250
+ <argument>
251
+ <name>NewExternalIPAddress</name>
252
+ <direction>out</direction>
253
+ <relatedStateVariable>ExternalIPAddress</relatedStateVariable>
254
+ </argument>
255
+ </argumentList>
256
+ </action>
257
+ <action>
258
+ <name>DeletePortMapping</name>
259
+ <argumentList>
260
+ <argument>
261
+ <name>NewRemoteHost</name>
262
+ <direction>in</direction>
263
+ <relatedStateVariable>RemoteHost</relatedStateVariable>
264
+ </argument>
265
+ <argument>
266
+ <name>NewExternalPort</name>
267
+ <direction>in</direction>
268
+ <relatedStateVariable>ExternalPort</relatedStateVariable>
269
+ </argument>
270
+ <argument>
271
+ <name>NewProtocol</name>
272
+ <direction>in</direction>
273
+ <relatedStateVariable>PortMappingProtocol</relatedStateVariable>
274
+ </argument>
275
+ </argumentList>
276
+ </action>
277
+ <action>
278
+ <name>SetConnectionType</name>
279
+ <argumentList>
280
+ <argument>
281
+ <name>NewConnectionType</name>
282
+ <direction>in</direction>
283
+ <relatedStateVariable>ConnectionType</relatedStateVariable>
284
+ </argument>
285
+ </argumentList>
286
+ </action>
287
+ <action>
288
+ <name>GetConnectionTypeInfo</name>
289
+ <argumentList>
290
+ <argument>
291
+ <name>NewConnectionType</name>
292
+ <direction>out</direction>
293
+ <relatedStateVariable>ConnectionType</relatedStateVariable>
294
+ </argument>
295
+ <argument>
296
+ <name>NewPossibleConnectionTypes</name>
297
+ <direction>out</direction>
298
+ <relatedStateVariable>PossibleConnectionTypes</relatedStateVariable>
299
+ </argument>
300
+ </argumentList>
301
+ </action>
302
+ <action>
303
+ <name>RequestConnection</name>
304
+ </action>
305
+ <action>
306
+ <name>ForceTermination</name>
307
+ </action>
308
+ <action>
309
+ <name>GetStatusInfo</name>
310
+ <argumentList>
311
+ <argument>
312
+ <name>NewConnectionStatus</name>
313
+ <direction>out</direction>
314
+ <relatedStateVariable>ConnectionStatus</relatedStateVariable>
315
+ </argument>
316
+ <argument>
317
+ <name>NewLastConnectionError</name>
318
+ <direction>out</direction>
319
+ <relatedStateVariable>LastConnectionError</relatedStateVariable>
320
+ </argument>
321
+ <argument>
322
+ <name>NewUptime</name>
323
+ <direction>out</direction>
324
+ <relatedStateVariable>Uptime</relatedStateVariable>
325
+ </argument>
326
+ </argumentList>
327
+ </action>
328
+ <action>
329
+ <name>GetNATRSIPStatus</name>
330
+ <argumentList>
331
+ <argument>
332
+ <name>NewRSIPAvailable</name>
333
+ <direction>out</direction>
334
+ <relatedStateVariable>RSIPAvailable</relatedStateVariable>
335
+ </argument>
336
+ <argument>
337
+ <name>NewNATEnabled</name>
338
+ <direction>out</direction>
339
+ <relatedStateVariable>NATEnabled</relatedStateVariable>
340
+ </argument>
341
+ </argumentList>
342
+ </action>
343
+ <action>
344
+ <name>GetGenericPortMappingEntry</name>
345
+ <argumentList>
346
+ <argument>
347
+ <name>NewPortMappingIndex</name>
348
+ <direction>in</direction>
349
+ <relatedStateVariable>PortMappingNumberOfEntries</relatedStateVariable>
350
+ </argument>
351
+ <argument>
352
+ <name>NewRemoteHost</name>
353
+ <direction>out</direction>
354
+ <relatedStateVariable>RemoteHost</relatedStateVariable>
355
+ </argument>
356
+ <argument>
357
+ <name>NewExternalPort</name>
358
+ <direction>out</direction>
359
+ <relatedStateVariable>ExternalPort</relatedStateVariable>
360
+ </argument>
361
+ <argument>
362
+ <name>NewProtocol</name>
363
+ <direction>out</direction>
364
+ <relatedStateVariable>PortMappingProtocol</relatedStateVariable>
365
+ </argument>
366
+ <argument>
367
+ <name>NewInternalPort</name>
368
+ <direction>out</direction>
369
+ <relatedStateVariable>InternalPort</relatedStateVariable>
370
+ </argument>
371
+ <argument>
372
+ <name>NewInternalClient</name>
373
+ <direction>out</direction>
374
+ <relatedStateVariable>InternalClient</relatedStateVariable>
375
+ </argument>
376
+ <argument>
377
+ <name>NewEnabled</name>
378
+ <direction>out</direction>
379
+ <relatedStateVariable>PortMappingEnabled</relatedStateVariable>
380
+ </argument>
381
+ <argument>
382
+ <name>NewPortMappingDescription</name>
383
+ <direction>out</direction>
384
+ <relatedStateVariable>PortMappingDescription</relatedStateVariable>
385
+ </argument>
386
+ <argument>
387
+ <name>NewLeaseDuration</name>
388
+ <direction>out</direction>
389
+ <relatedStateVariable>PortMappingLeaseDuration</relatedStateVariable>
390
+ </argument>
391
+ </argumentList>
392
+ </action>
393
+ <action>
394
+ <name>GetSpecificPortMappingEntry</name>
395
+ <argumentList>
396
+ <argument>
397
+ <name>NewRemoteHost</name>
398
+ <direction>in</direction>
399
+ <relatedStateVariable>RemoteHost</relatedStateVariable>
400
+ </argument>
401
+ <argument>
402
+ <name>NewExternalPort</name>
403
+ <direction>in</direction>
404
+ <relatedStateVariable>ExternalPort</relatedStateVariable>
405
+ </argument>
406
+ <argument>
407
+ <name>NewProtocol</name>
408
+ <direction>in</direction>
409
+ <relatedStateVariable>PortMappingProtocol</relatedStateVariable>
410
+ </argument>
411
+ <argument>
412
+ <name>NewInternalPort</name>
413
+ <direction>out</direction>
414
+ <relatedStateVariable>InternalPort</relatedStateVariable>
415
+ </argument>
416
+ <argument>
417
+ <name>NewInternalClient</name>
418
+ <direction>out</direction>
419
+ <relatedStateVariable>InternalClient</relatedStateVariable>
420
+ </argument>
421
+ <argument>
422
+ <name>NewEnabled</name>
423
+ <direction>out</direction>
424
+ <relatedStateVariable>PortMappingEnabled</relatedStateVariable>
425
+ </argument>
426
+ <argument>
427
+ <name>NewPortMappingDescription</name>
428
+ <direction>out</direction>
429
+ <relatedStateVariable>PortMappingDescription</relatedStateVariable>
430
+ </argument>
431
+ <argument>
432
+ <name>NewLeaseDuration</name>
433
+ <direction>out</direction>
434
+ <relatedStateVariable>PortMappingLeaseDuration</relatedStateVariable>
435
+ </argument>
436
+ </argumentList>
437
+ </action>
438
+ </actionList>
439
+ <serviceStateTable>
440
+ <stateVariable sendEvents="no">
441
+ <name>ConnectionType</name>
442
+ <dataType>string</dataType>
443
+ </stateVariable>
444
+ <stateVariable sendEvents="no">
445
+ <name>PossibleConnectionTypes</name>
446
+ <dataType>string</dataType>
447
+ <allowedValueList>
448
+ <allowedValue>Unconfigured</allowedValue>
449
+ <allowedValue>IP_Routed</allowedValue>
450
+ <allowedValue>IP_Bridged</allowedValue>
451
+ </allowedValueList>
452
+ </stateVariable>
453
+ <stateVariable sendEvents="no">
454
+ <name>ConnectionStatus</name>
455
+ <dataType>string</dataType>
456
+ <allowedValueList>
457
+ <allowedValue>Unconfigured</allowedValue>
458
+ <allowedValue>Connecting</allowedValue>
459
+ <allowedValue>Connected</allowedValue>
460
+ <allowedValue>PendingDisconnect</allowedValue>
461
+ <allowedValue>Disconnecting</allowedValue>
462
+ <allowedValue>Disconnected</allowedValue>
463
+ </allowedValueList>
464
+ </stateVariable>
465
+ <stateVariable sendEvents="no">
466
+ <name>Uptime</name>
467
+ <dataType>ui4</dataType>
468
+ </stateVariable>
469
+ <stateVariable sendEvents="no">
470
+ <name>LastConnectionError</name>
471
+ <dataType>string</dataType>
472
+ <allowedValueList>
473
+ <allowedValue>ERROR_NONE</allowedValue>
474
+ </allowedValueList>
475
+ </stateVariable>
476
+ <stateVariable sendEvents="no">
477
+ <name>RSIPAvailable</name>
478
+ <dataType>boolean</dataType>
479
+ </stateVariable>
480
+ <stateVariable sendEvents="no">
481
+ <name>NATEnabled</name>
482
+ <dataType>boolean</dataType>
483
+ </stateVariable>
484
+ <stateVariable sendEvents="no">
485
+ <name>ExternalIPAddress</name>
486
+ <dataType>string</dataType>
487
+ </stateVariable>
488
+ <stateVariable sendEvents="no">
489
+ <name>PortMappingNumberOfEntries</name>
490
+ <dataType>ui2</dataType>
491
+ </stateVariable>
492
+ <stateVariable sendEvents="no">
493
+ <name>PortMappingEnabled</name>
494
+ <dataType>boolean</dataType>
495
+ </stateVariable>
496
+ <stateVariable sendEvents="no">
497
+ <name>PortMappingLeaseDuration</name>
498
+ <dataType>ui4</dataType>
499
+ </stateVariable>
500
+ <stateVariable sendEvents="no">
501
+ <name>RemoteHost</name>
502
+ <dataType>string</dataType>
503
+ </stateVariable>
504
+ <stateVariable sendEvents="no">
505
+ <name>ExternalPort</name>
506
+ <dataType>ui2</dataType>
507
+ </stateVariable>
508
+ <stateVariable sendEvents="no">
509
+ <name>InternalPort</name>
510
+ <dataType>ui2</dataType>
511
+ </stateVariable>
512
+ <stateVariable sendEvents="no">
513
+ <name>PortMappingProtocol</name>
514
+ <dataType>string</dataType>
515
+ <allowedValueList>
516
+ <allowedValue>TCP</allowedValue>
517
+ <allowedValue>UDP</allowedValue>
518
+ </allowedValueList>
519
+ </stateVariable>
520
+ <stateVariable sendEvents="no">
521
+ <name>InternalClient</name>
522
+ <dataType>string</dataType>
523
+ </stateVariable>
524
+ <stateVariable sendEvents="no">
525
+ <name>PortMappingDescription</name>
526
+ <dataType>string</dataType>
527
+ </stateVariable>
528
+ </serviceStateTable>
529
+ </scpd>
530
+ XML
531
+
532
+ IPCN_XML = <<-XML
533
+ <?xml version="1.0"?>
534
+ <scpd xmlns="urn:schemas-upnp-org:service-1-0">
535
+ <specVersion>
536
+ <major>1</major>
537
+ <minor>0</minor>
538
+ </specVersion>
539
+ <actionList>
540
+ <action>
541
+ <name>AddPortMapping</name>
542
+ <argumentList>
543
+ <argument>
544
+ <name>NewRemoteHost</name>
545
+ <direction>in</direction>
546
+ <relatedStateVariable>RemoteHost</relatedStateVariable>
547
+ </argument>
548
+ <argument>
549
+ <name>NewExternalPort</name>
550
+ <direction>in</direction>
551
+ <relatedStateVariable>ExternalPort</relatedStateVariable>
552
+ </argument>
553
+ <argument>
554
+ <name>NewProtocol</name>
555
+ <direction>in</direction>
556
+ <relatedStateVariable>
557
+ PortMappingProtocol</relatedStateVariable>
558
+ </argument>
559
+ <argument>
560
+ <name>NewInternalPort</name>
561
+ <direction>in</direction>
562
+ <relatedStateVariable>InternalPort</relatedStateVariable>
563
+ </argument>
564
+ <argument>
565
+ <name>NewInternalClient</name>
566
+ <direction>in</direction>
567
+ <relatedStateVariable>
568
+ InternalClient</relatedStateVariable>
569
+ </argument>
570
+ <argument>
571
+ <name>NewEnabled</name>
572
+ <direction>in</direction>
573
+ <relatedStateVariable>
574
+ PortMappingEnabled</relatedStateVariable>
575
+ </argument>
576
+ <argument>
577
+ <name>NewPortMappingDescription</name>
578
+ <direction>in</direction>
579
+ <relatedStateVariable>
580
+ PortMappingDescription</relatedStateVariable>
581
+ </argument>
582
+ <argument>
583
+ <name>NewLeaseDuration</name>
584
+ <direction>in</direction>
585
+ <relatedStateVariable>
586
+ PortMappingLeaseDuration</relatedStateVariable>
587
+ </argument>
588
+ </argumentList>
589
+ </action>
590
+ <action>
591
+ <name>GetExternalIPAddress</name>
592
+ <argumentList>
593
+ <argument>
594
+ <name>NewExternalIPAddress</name>
595
+ <direction>out</direction>
596
+ <relatedStateVariable>
597
+ ExternalIPAddress</relatedStateVariable>
598
+ </argument>
599
+ </argumentList>
600
+ </action>
601
+ <action>
602
+ <name>DeletePortMapping</name>
603
+ <argumentList>
604
+ <argument>
605
+ <name>NewRemoteHost</name>
606
+ <direction>in</direction>
607
+ <relatedStateVariable>RemoteHost</relatedStateVariable>
608
+ </argument>
609
+ <argument>
610
+ <name>NewExternalPort</name>
611
+ <direction>in</direction>
612
+ <relatedStateVariable>ExternalPort</relatedStateVariable>
613
+ </argument>
614
+ <argument>
615
+ <name>NewProtocol</name>
616
+ <direction>in</direction>
617
+ <relatedStateVariable>
618
+ PortMappingProtocol</relatedStateVariable>
619
+ </argument>
620
+ </argumentList>
621
+ </action>
622
+ <action>
623
+ <name>SetConnectionType</name>
624
+ <argumentList>
625
+ <argument>
626
+ <name>NewConnectionType</name>
627
+ <direction>in</direction>
628
+ <relatedStateVariable>
629
+ ConnectionType</relatedStateVariable>
630
+ </argument>
631
+ </argumentList>
632
+ </action>
633
+ <action>
634
+ <name>GetConnectionTypeInfo</name>
635
+ <argumentList>
636
+ <argument>
637
+ <name>NewConnectionType</name>
638
+ <direction>out</direction>
639
+ <relatedStateVariable>
640
+ ConnectionType</relatedStateVariable>
641
+ </argument>
642
+ <argument>
643
+ <name>NewPossibleConnectionTypes</name>
644
+ <direction>out</direction>
645
+ <relatedStateVariable>
646
+ PossibleConnectionTypes</relatedStateVariable>
647
+ </argument>
648
+ </argumentList>
649
+ </action>
650
+ <action>
651
+ <name>RequestConnection</name>
652
+ </action>
653
+ <action>
654
+ <name>ForceTermination</name>
655
+ </action>
656
+ <action>
657
+ <name>GetStatusInfo</name>
658
+ <argumentList>
659
+ <argument>
660
+ <name>NewConnectionStatus</name>
661
+ <direction>out</direction>
662
+ <relatedStateVariable>
663
+ ConnectionStatus</relatedStateVariable>
664
+ </argument>
665
+ <argument>
666
+ <name>NewLastConnectionError</name>
667
+ <direction>out</direction>
668
+ <relatedStateVariable>
669
+ LastConnectionError</relatedStateVariable>
670
+ </argument>
671
+ <argument>
672
+ <name>NewUptime</name>
673
+ <direction>out</direction>
674
+ <relatedStateVariable>Uptime</relatedStateVariable>
675
+ </argument>
676
+ </argumentList>
677
+ </action>
678
+ <action>
679
+ <name>GetNATRSIPStatus</name>
680
+ <argumentList>
681
+ <argument>
682
+ <name>NewRSIPAvailable</name>
683
+ <direction>out</direction>
684
+ <relatedStateVariable>
685
+ RSIPAvailable</relatedStateVariable>
686
+ </argument>
687
+ <argument>
688
+ <name>NewNATEnabled</name>
689
+ <direction>out</direction>
690
+ <relatedStateVariable>NATEnabled</relatedStateVariable>
691
+ </argument>
692
+ </argumentList>
693
+ </action>
694
+ <action>
695
+ <name>GetGenericPortMappingEntry</name>
696
+ <argumentList>
697
+ <argument>
698
+ <name>NewPortMappingIndex</name>
699
+ <direction>in</direction>
700
+ <relatedStateVariable>
701
+ PortMappingNumberOfEntries</relatedStateVariable>
702
+ </argument>
703
+ <argument>
704
+ <name>NewRemoteHost</name>
705
+ <direction>out</direction>
706
+ <relatedStateVariable>RemoteHost</relatedStateVariable>
707
+ </argument>
708
+ <argument>
709
+ <name>NewExternalPort</name>
710
+ <direction>out</direction>
711
+ <relatedStateVariable>ExternalPort</relatedStateVariable>
712
+ </argument>
713
+ <argument>
714
+ <name>NewProtocol</name>
715
+ <direction>out</direction>
716
+ <relatedStateVariable>
717
+ PortMappingProtocol</relatedStateVariable>
718
+ </argument>
719
+ <argument>
720
+ <name>NewInternalPort</name>
721
+ <direction>out</direction>
722
+ <relatedStateVariable>InternalPort</relatedStateVariable>
723
+ </argument>
724
+ <argument>
725
+ <name>NewInternalClient</name>
726
+ <direction>out</direction>
727
+ <relatedStateVariable>
728
+ InternalClient</relatedStateVariable>
729
+ </argument>
730
+ <argument>
731
+ <name>NewEnabled</name>
732
+ <direction>out</direction>
733
+ <relatedStateVariable>
734
+ PortMappingEnabled</relatedStateVariable>
735
+ </argument>
736
+ <argument>
737
+ <name>NewPortMappingDescription</name>
738
+ <direction>out</direction>
739
+ <relatedStateVariable>
740
+ PortMappingDescription</relatedStateVariable>
741
+ </argument>
742
+ <argument>
743
+ <name>NewLeaseDuration</name>
744
+ <direction>out</direction>
745
+ <relatedStateVariable>
746
+ PortMappingLeaseDuration</relatedStateVariable>
747
+ </argument>
748
+ </argumentList>
749
+ </action>
750
+ <action>
751
+ <name>GetSpecificPortMappingEntry</name>
752
+ <argumentList>
753
+ <argument>
754
+ <name>NewRemoteHost</name>
755
+ <direction>in</direction>
756
+ <relatedStateVariable>RemoteHost</relatedStateVariable>
757
+ </argument>
758
+ <argument>
759
+ <name>NewExternalPort</name>
760
+ <direction>in</direction>
761
+ <relatedStateVariable>ExternalPort</relatedStateVariable>
762
+ </argument>
763
+ <argument>
764
+ <name>NewProtocol</name>
765
+ <direction>in</direction>
766
+ <relatedStateVariable>
767
+ PortMappingProtocol</relatedStateVariable>
768
+ </argument>
769
+ <argument>
770
+ <name>NewInternalPort</name>
771
+ <direction>out</direction>
772
+ <relatedStateVariable>InternalPort</relatedStateVariable>
773
+ </argument>
774
+ <argument>
775
+ <name>NewInternalClient</name>
776
+ <direction>out</direction>
777
+ <relatedStateVariable>
778
+ InternalClient</relatedStateVariable>
779
+ </argument>
780
+ <argument>
781
+ <name>NewEnabled</name>
782
+ <direction>out</direction>
783
+ <relatedStateVariable>
784
+ PortMappingEnabled</relatedStateVariable>
785
+ </argument>
786
+ <argument>
787
+ <name>NewPortMappingDescription</name>
788
+ <direction>out</direction>
789
+ <relatedStateVariable>
790
+ PortMappingDescription</relatedStateVariable>
791
+ </argument>
792
+ <argument>
793
+ <name>NewLeaseDuration</name>
794
+ <direction>out</direction>
795
+ <relatedStateVariable>
796
+ PortMappingLeaseDuration</relatedStateVariable>
797
+ </argument>
798
+ </argumentList>
799
+ </action>
800
+ </actionList>
801
+ <serviceStateTable>
802
+ <stateVariable sendEvents="no">
803
+ <name>ConnectionType</name>
804
+ <dataType>string</dataType>
805
+ </stateVariable>
806
+ <stateVariable sendEvents="no">
807
+ <name>PossibleConnectionTypes</name>
808
+ <dataType>string</dataType>
809
+ <allowedValueList>
810
+ <allowedValue>Unconfigured</allowedValue>
811
+ <allowedValue>IP_Routed</allowedValue>
812
+ <allowedValue>IP_Bridged</allowedValue>
813
+ </allowedValueList>
814
+ </stateVariable>
815
+ <stateVariable sendEvents="no">
816
+ <name>ConnectionStatus</name>
817
+ <dataType>string</dataType>
818
+ <allowedValueList>
819
+ <allowedValue>Unconfigured</allowedValue>
820
+ <allowedValue>Connecting</allowedValue>
821
+ <allowedValue>Connected</allowedValue>
822
+ <allowedValue>PendingDisconnect</allowedValue>
823
+ <allowedValue>Disconnecting</allowedValue>
824
+ <allowedValue>Disconnected</allowedValue>
825
+ </allowedValueList>
826
+ </stateVariable>
827
+ <stateVariable sendEvents="no">
828
+ <name>Uptime</name>
829
+ <dataType>ui4</dataType>
830
+ </stateVariable>
831
+ <stateVariable sendEvents="no">
832
+ <name>LastConnectionError</name>
833
+ <dataType>string</dataType>
834
+ <allowedValueList>
835
+ <allowedValue>ERROR_NONE</allowedValue>
836
+ </allowedValueList>
837
+ </stateVariable>
838
+ <stateVariable sendEvents="no">
839
+ <name>RSIPAvailable</name>
840
+ <dataType>boolean</dataType>
841
+ </stateVariable>
842
+ <stateVariable sendEvents="no">
843
+ <name>NATEnabled</name>
844
+ <dataType>boolean</dataType>
845
+ </stateVariable>
846
+ <stateVariable sendEvents="no">
847
+ <name>ExternalIPAddress</name>
848
+ <dataType>string</dataType>
849
+ </stateVariable>
850
+ <stateVariable sendEvents="no">
851
+ <name>PortMappingNumberOfEntries</name>
852
+ <dataType>ui2</dataType>
853
+ </stateVariable>
854
+ <stateVariable sendEvents="no">
855
+ <name>PortMappingEnabled</name>
856
+ <dataType>boolean</dataType>
857
+ </stateVariable>
858
+ <stateVariable sendEvents="no">
859
+ <name>PortMappingLeaseDuration</name>
860
+ <dataType>ui4</dataType>
861
+ </stateVariable>
862
+ <stateVariable sendEvents="no">
863
+ <name>RemoteHost</name>
864
+ <dataType>string</dataType>
865
+ </stateVariable>
866
+ <stateVariable sendEvents="no">
867
+ <name>ExternalPort</name>
868
+ <dataType>ui2</dataType>
869
+ </stateVariable>
870
+ <stateVariable sendEvents="no">
871
+ <name>InternalPort</name>
872
+ <dataType>ui2</dataType>
873
+ </stateVariable>
874
+ <stateVariable sendEvents="no">
875
+ <name>PortMappingProtocol</name>
876
+ <dataType>string</dataType>
877
+ <allowedValueList>
878
+ <allowedValue>TCP</allowedValue>
879
+ <allowedValue>UDP</allowedValue>
880
+ </allowedValueList>
881
+ </stateVariable>
882
+ <stateVariable sendEvents="no">
883
+ <name>InternalClient</name>
884
+ <dataType>string</dataType>
885
+ </stateVariable>
886
+ <stateVariable sendEvents="no">
887
+ <name>PortMappingDescription</name>
888
+ <dataType>string</dataType>
889
+ </stateVariable>
890
+ </serviceStateTable>
891
+ </scpd>
892
+ XML
893
+
894
+ CFG_XML = <<-XML
895
+ <?xml version="1.0"?>
896
+ <scpd xmlns="urn:schemas-upnp-org:service-1-0">
897
+ <specVersion>
898
+ <major>1</major>
899
+ <minor>0</minor>
900
+ </specVersion>
901
+ <actionList>
902
+ <action>
903
+ <name>GetCommonLinkProperties</name>
904
+ <argumentList>
905
+ <argument>
906
+ <name>NewWANAccessType</name>
907
+ <direction>out</direction>
908
+ <relatedStateVariable>
909
+ WANAccessType</relatedStateVariable>
910
+ </argument>
911
+ <argument>
912
+ <name>NewLayer1UpstreamMaxBitRate</name>
913
+ <direction>out</direction>
914
+ <relatedStateVariable>
915
+ Layer1UpstreamMaxBitRate</relatedStateVariable>
916
+ </argument>
917
+ <argument>
918
+ <name>NewLayer1DownstreamMaxBitRate</name>
919
+ <direction>out</direction>
920
+ <relatedStateVariable>
921
+ Layer1DownstreamMaxBitRate</relatedStateVariable>
922
+ </argument>
923
+ <argument>
924
+ <name>NewPhysicalLinkStatus</name>
925
+ <direction>out</direction>
926
+ <relatedStateVariable>
927
+ PhysicalLinkStatus</relatedStateVariable>
928
+ </argument>
929
+ </argumentList>
930
+ </action>
931
+ <action>
932
+ <name>GetTotalBytesSent</name>
933
+ <argumentList>
934
+ <argument>
935
+ <name>NewTotalBytesSent</name>
936
+ <direction>out</direction>
937
+ <relatedStateVariable>
938
+ TotalBytesSent</relatedStateVariable>
939
+ </argument>
940
+ </argumentList>
941
+ </action>
942
+ <action>
943
+ <name>GetTotalBytesReceived</name>
944
+ <argumentList>
945
+ <argument>
946
+ <name>NewTotalBytesReceived</name>
947
+ <direction>out</direction>
948
+ <relatedStateVariable>
949
+ TotalBytesReceived</relatedStateVariable>
950
+ </argument>
951
+ </argumentList>
952
+ </action>
953
+ <action>
954
+ <name>GetTotalPacketsSent</name>
955
+ <argumentList>
956
+ <argument>
957
+ <name>NewTotalPacketsSent</name>
958
+ <direction>out</direction>
959
+ <relatedStateVariable>
960
+ TotalPacketsSent</relatedStateVariable>
961
+ </argument>
962
+ </argumentList>
963
+ </action>
964
+ <action>
965
+ <name>GetTotalPacketsReceived</name>
966
+ <argumentList>
967
+ <argument>
968
+ <name>NewTotalPacketsReceived</name>
969
+ <direction>out</direction>
970
+ <relatedStateVariable>
971
+ TotalPacketsReceived</relatedStateVariable>
972
+ </argument>
973
+ </argumentList>
974
+ </action>
975
+ </actionList>
976
+ <serviceStateTable>
977
+ <stateVariable sendEvents="no">
978
+ <name>WANAccessType</name>
979
+ <dataType>string</dataType>
980
+ <allowedValueList>
981
+ <allowedValue>DSL</allowedValue>
982
+ <allowedValue>POTS</allowedValue>
983
+ <allowedValue>Cable</allowedValue>
984
+ <allowedValue>Ethernet</allowedValue>
985
+ </allowedValueList>
986
+ </stateVariable>
987
+ <stateVariable sendEvents="no">
988
+ <name>Layer1UpstreamMaxBitRate</name>
989
+ <dataType>ui4</dataType>
990
+ </stateVariable>
991
+ <stateVariable sendEvents="no">
992
+ <name>Layer1DownstreamMaxBitRate</name>
993
+ <dataType>ui4</dataType>
994
+ </stateVariable>
995
+ <stateVariable sendEvents="no">
996
+ <name>PhysicalLinkStatus</name>
997
+ <dataType>string</dataType>
998
+ <allowedValueList>
999
+ <allowedValue>Up</allowedValue>
1000
+ <allowedValue>Down</allowedValue>
1001
+ <allowedValue>Initializing</allowedValue>
1002
+ <allowedValue>Unavailable</allowedValue>
1003
+ </allowedValueList>
1004
+ </stateVariable>
1005
+ <stateVariable sendEvents="no">
1006
+ <name>TotalBytesSent</name>
1007
+ <dataType>ui4</dataType>
1008
+ </stateVariable>
1009
+ <stateVariable sendEvents="no">
1010
+ <name>TotalBytesReceived</name>
1011
+ <dataType>ui4</dataType>
1012
+ </stateVariable>
1013
+ <stateVariable sendEvents="no">
1014
+ <name>TotalPacketsSent</name>
1015
+ <dataType>ui4</dataType>
1016
+ </stateVariable>
1017
+ <stateVariable sendEvents="no">
1018
+ <name>TotalPacketsReceived</name>
1019
+ <dataType>ui4</dataType>
1020
+ </stateVariable>
1021
+ </serviceStateTable>
1022
+ </scpd>
1023
+ XML
1024
+
1025
+ end
1026
+
1027
+ end
1028
+