Symlink libwhefs.so to avoid LD_LIBRARY_PATH requirement
[iqiq.git] / profiles / tmob-connection.fth
1 \ This program is embedded as CDATA in the <Connection> element in T-Mobile's
2 \ default profile. It appears to specify when a connection is eligible for
3 \ reporting.
4
5 \ Foreign method (propertyId -- n) 
6 \ IQNetwork::CIQ_ForthConnectionObj_NetKeyInteger(ciq_forth_vm*, ciq_forth_object*)
7 \ Retrieves an integer valued property from the connection object.
8 : #netkey@ 0 0 METHODCALL ;
9
10 \ Foreign method (propertyId -- c1 .. cN N)
11 \ IQNetwork::CIQ_ForthConnectionObj_NetKeyString(ciq_forth_vm*, ciq_forth_object*)
12 \ Retrieves a string valued property from the connection object.
13 : $netkey@ 0 1 METHODCALL ;
14
15 \ Properties in the connection object and enums for their values.
16 1    CONSTANT PROPID_TECH ;     \ Current network technology.
17 3    CONSTANT PROPID_ROAMING ;  \ Roaming state.
18 101  CONSTANT PROP_TECH_GSM ;   \ GSM connection.
19 104  CONSTANT PROP_ROAMING_NO ; \ Not roaming.
20 106  CONSTANT PROP_TECH_LAN ;   \ LAN connection.
21 2000 CONSTANT PROPID_APN ;      \ Access point name.
22 2001 CONSTANT PROPID_MCC ;      \ Mobile country code.
23 2002 CONSTANT PROPID_MNC ;      \ Mobile network code.
24
25 \ :noname compiles an anonymous definition and pushes a token that can
26 \ be used to execute it (so the side-effect of this embedded program is
27 \ to leave such a token on the stack.)
28 :noname
29   \ Determine if this connection is eligible.
30   PROPID_TECH #netkey@ DUP  \ Get network technology. (-- t t)
31   PROP_TECH_LAN = DUP IF    \ Is this a LAN connection? (t t -- t flags)
32     NIP                     \ If so, leave TRUE on the stack. (t flags -- flags)
33   ELSE  \ Not a LAN connection.
34     DROP
35     PROP_TECH_GSM =  \ GSM connection, (t -- flags)
36     PROPID_ROAMING #netkey@ PROP_ROAMING_NO = AND  \ And not roaming?
37     DUP IF  \ GSM connection, not roaming. (flags -- flags)
38       DROP
39       \ Does the access point name equal epc.tmobile.com?
40       PROPID_APN $netkey@ S" epc.tmobile.com" COMPARE 0= DUP IF
41         DROP
42         \ Is the country code for the United States?
43         PROPID_MCC #netkey@ 310 = DUP IF
44           DROP
45           \ This seems intended to check if the network code is one of several
46           \ values, leaving TRUE on the stack if so else FALSE. However it
47           \ seems to be  buggy, and actually returns non-zero for any 
48           \ non-zero MNC. For a list of mobile network codes, see
49           \ http://en.wikipedia.org/wiki/List_of_mobile_network_codes_in_the_United_States#MCC_310
50           PROPID_MNC #netkey@  \ (-- m)
51           DUP 200 =       \ T-Mobile USA  Formerly Smith Bagley, discontinued (m -- m f) 
52           SWAP DUP 901 =  \ ? (m f -- f m f)
53           SWAP DUP 800 =  \ T-Mobile USA  Formerly SOL Communications (...--f+ m f)
54           SWAP DUP 660 =  \ T-Mobile USA  Formerly DigiPhone PCS / DigiPH
55           SWAP DUP 580 =  \ T-Mobile USA  Formerly PCS One
56           SWAP DUP 310 =  \ T-Mobile USA  Formerly Aerial Communications
57           SWAP DUP 270 =  \ T-Mobile USA  Formerly Powertel
58           SWAP DUP 250 =  \ T-Mobile USA  Discontinued
59           SWAP DUP 220 =  \ T-Mobile USA  Discontinued
60           SWAP DUP 970 =  \ Globalstar    Satellite non-GSM
61           SWAP DUP 160 =  \ T-Mobile USA  Formerly Omnipoint, discontinued
62           SWAP DUP 260 =  \ T-Mobile USA  Standard; formerly Cook Inlet Voicestream
63           \ BUG: There's probably a missing SWAP DROP here.
64           \ The stack is now (f{11} m f). The following 11 ORs will include 'm'
65           \ and omit one test result, instead of ORing all the test results.
66           OR OR OR OR OR OR OR OR OR OR OR
67         THEN  \ end if MCC == 310 (FALSE if not).
68       THEN  \ end if APN == "epc.tmobile.com" (FALSE if not).
69     THEN  \ end if GSM and not roaming (FALSE if not).
70   THEN  \ end if !LAN
71 ;