18
18
else :
19
19
has_windll = hasattr (ctypes , 'windll' )
20
20
21
+ # this MUST be imported for urllib to work on OSX
21
22
try :
22
- urllib_imports = ['ProxyHandler' , 'build_opener' , 'install_opener' , 'urlopen' ]
23
+ import SystemConfiguration as osxsc
24
+ has_osxsc = True
25
+ except ImportError :
26
+ has_osxsc = False
27
+
28
+ try :
29
+ urllib_imports = ['ProxyHandler' , 'Request' , 'build_opener' , 'install_opener' , 'urlopen' ]
23
30
if sys .version_info [0 ] < 3 :
24
31
urllib = __import__ ('urllib2' , fromlist = urllib_imports )
25
32
else :
34
41
bytes = lambda * args : str (* args [:1 ])
35
42
NULL_BYTE = '\x00 '
36
43
else :
37
- is_str = lambda obj : issubclass (obj .__class__ , __builtins__ .str )
44
+ if isinstance (__builtins__ , dict ):
45
+ is_str = lambda obj : issubclass (obj .__class__ , __builtins__ ['str' ])
46
+ str = lambda x : __builtins__ ['str' ](x , 'UTF-8' )
47
+ else :
48
+ is_str = lambda obj : issubclass (obj .__class__ , __builtins__ .str )
49
+ str = lambda x : __builtins__ .str (x , 'UTF-8' )
38
50
is_bytes = lambda obj : issubclass (obj .__class__ , bytes )
39
- str = lambda x : __builtins__ .str (x , 'UTF-8' )
40
51
NULL_BYTE = bytes ('\x00 ' , 'UTF-8' )
41
52
long = int
42
53
@@ -336,6 +347,7 @@ def driver_init_http(self):
336
347
opener .addheaders = [('User-Agent' , HTTP_USER_AGENT )]
337
348
urllib .install_opener (opener )
338
349
self ._http_last_seen = time .time ()
350
+ self ._http_request_headers = {'Content-Type' : 'application/octet-stream' }
339
351
340
352
def register_extension (self , extension_name ):
341
353
self .last_registered_extension = extension_name
@@ -379,8 +391,9 @@ def send_packet(self, packet):
379
391
380
392
def get_packet_http (self ):
381
393
packet = None
394
+ request = urllib .Request (HTTP_CONNECTION_URL , bytes ('RECV' , 'UTF-8' ), self ._http_request_headers )
382
395
try :
383
- url_h = urllib .urlopen (HTTP_CONNECTION_URL , bytes ( 'RECV' , 'UTF-8' ) )
396
+ url_h = urllib .urlopen (request )
384
397
packet = url_h .read ()
385
398
except :
386
399
if (time .time () - self ._http_last_seen ) > HTTP_COMMUNICATION_TIMEOUT :
@@ -394,8 +407,9 @@ def get_packet_http(self):
394
407
return packet
395
408
396
409
def send_packet_http (self , packet ):
410
+ request = urllib .Request (HTTP_CONNECTION_URL , packet , self ._http_request_headers )
397
411
try :
398
- url_h = urllib .urlopen (HTTP_CONNECTION_URL , packet )
412
+ url_h = urllib .urlopen (request )
399
413
response = url_h .read ()
400
414
except :
401
415
if (time .time () - self ._http_last_seen ) > HTTP_COMMUNICATION_TIMEOUT :
@@ -504,7 +518,7 @@ def _core_loadlib(self, request, response):
504
518
extension_name = self .last_registered_extension
505
519
506
520
if extension_name :
507
- check_extension = lambda x : x .startswith (extension_name ) or x . startswith ( 'channel_open_' + extension_name )
521
+ check_extension = lambda x : x .startswith (extension_name )
508
522
lib_methods = list (filter (check_extension , list (self .extension_functions .keys ())))
509
523
for method in lib_methods :
510
524
response += tlv_pack (TLV_TYPE_METHOD , method )
0 commit comments