11import socket
22import unittest
33from ctypes import string_at , memmove
4- from libasyncproxy .AsyncProxy import AsyncProxy2FD
4+ from libasyncproxy .AsyncProxy import AsyncProxy2FD , transform_res
55
66class NosyProxy (AsyncProxy2FD ):
7- def in2out (self , ptr , length ):
8- # Read original data from the pointer
7+ def in2out (self , res_p ):
8+ # unpack the struct
9+ tr = res_p .contents
10+ ptr , length = tr .buf , tr .len
11+ # read, transform, write back
912 original = string_at (ptr , length )
10- # Transform data to uppercase (note: transformation must retain length)
11- transformed = original .upper ()
13+ # Transform data to uppercase
14+ length -= 1
15+ transformed = original .upper ()[:length ]
1216 memmove (ptr , transformed , length )
1317 print ("in2out hook: transformed" , original , "to" , transformed )
18+ tr .len = length
1419
15- def out2in (self , ptr , length ):
16- # Read original data from the pointer
17- original = string_at (ptr , length )
18- # Reverse the data bytes (again, ensuring the length remains unchanged)
19- transformed = original [::- 1 ]
20+ def out2in (self , res_p ):
21+ # unpack the struct
22+ tr = res_p .contents
23+ ptr , length = tr .buf , tr .len
24+ # read, transform, write back
25+ original = string_at (ptr , length )
26+ length -= 1
27+ transformed = original [::- 1 ][1 :]
2028 memmove (ptr , transformed , length )
2129 print ("out2in hook: transformed" , original , "to" , transformed )
30+ tr .len = length
2231
2332class AsyncProxy2FDTest (unittest .TestCase ):
2433 def test_AsyncProxy (self ):
@@ -45,7 +54,7 @@ def test_AsyncProxy(self):
4554
4655 server_received = server_socket .recv (1024 )
4756 print ("Server received:" , server_received .decode ())
48- self .assertEqual (client_message .upper (), server_received )
57+ self .assertEqual (client_message .upper ()[: - 1 ] , server_received )
4958
5059 # Now send a message from server back to client.
5160 server_message = b"Hello from Server!"
@@ -54,7 +63,7 @@ def test_AsyncProxy(self):
5463
5564 client_received = client_socket .recv (1024 )
5665 print ("Client received:" , client_received .decode ())
57- self .assertEqual (server_message [::- 1 ], client_received )
66+ self .assertEqual (server_message [::- 1 ][ 1 :] , client_received )
5867
5968 # Shutdown the proxy worker and cleanup.
6069 proxy_fd .join (shutdown = True )
0 commit comments