@@ -6,7 +6,11 @@ from libcpp cimport bool
6
6
from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t
7
7
from libc.stdlib cimport malloc, free
8
8
9
- cdef extern from " tox/tox.h" : pass
9
+ from pytox import error
10
+ from pytox.options cimport Tox_Options, ToxOptions
11
+ from pytox.system cimport Tox_System
12
+
13
+ cdef extern from " tox/toxcore/tox.h" : pass
10
14
11
15
12
16
VERSION: str = " %d .%d .%d " % (tox_version_major(), tox_version_minor(), tox_version_patch())
@@ -28,72 +32,22 @@ MAX_FILENAME_LENGTH: int = tox_max_filename_length()
28
32
MAX_HOSTNAME_LENGTH: int = tox_max_hostname_length()
29
33
30
34
31
- class UseAfterFreeException (Exception ):
32
- def __init__ (self ):
33
- super ().__init__(
34
- " object used after it was killed/freed (or it was never initialised)" )
35
-
36
- class ToxException (Exception ):
37
- pass
38
-
39
- class ApiException (ToxException ):
40
- def __init__ (self , err ):
41
- super ().__init__(err)
42
- self .error = err
43
-
44
- class LengthException (ToxException ):
45
- pass
46
-
47
35
cdef void _check_len(str name, bytes data, int expected_length) except * :
48
36
if len (data) != expected_length:
49
- raise LengthException(
37
+ raise error. LengthException(
50
38
f" parameter '{name}' received bytes of invalid"
51
39
f" length {len(data)}, expected {expected_length}" )
52
40
53
-
54
- cdef class ToxOptions:
55
-
56
- cdef Tox_Options * _ptr
57
-
58
- def __init__ (self ):
59
- cdef Tox_Err_Options_New err = TOX_ERR_OPTIONS_NEW_OK
60
- self ._ptr = tox_options_new(& err)
61
- if err: raise ApiException(Tox_Err_Options_New(err))
62
-
63
- def __dealloc__ (self ):
64
- self .__exit__ (None , None , None )
65
-
66
- def __enter__ (self ):
67
- return self
68
-
69
- def __exit__ (self , exc_type , exc_value , exc_traceback ):
70
- tox_options_free(self ._ptr)
71
- self ._ptr = NULL
72
-
73
- cdef Tox_Options * _get(self ) except * :
74
- if self ._ptr is NULL :
75
- raise UseAfterFreeException()
76
- return self ._ptr
77
-
78
- @property
79
- def ipv6_enabled (self ) -> bool:
80
- return tox_options_get_ipv6_enabled(self._get())
81
-
82
- @ipv6_enabled.setter
83
- def ipv6_enabled(self , value: bool ):
84
- tox_options_set_ipv6_enabled(self ._get(), value)
85
-
86
-
87
41
cdef class Core:
88
42
89
43
cdef Tox * _ptr
90
44
91
45
def __init__ (self , options: ToxOptions = None ):
92
- cdef Tox_Err_New err = TOX_ERR_NEW_OK
46
+ err = TOX_ERR_NEW_OK
93
47
if options is None :
94
48
options = ToxOptions()
95
- self ._ptr = tox_new(options._ptr , & err)
96
- if err: raise ApiException(Tox_Err_New(err))
49
+ self ._ptr = tox_new(options._get() , & err)
50
+ if err: raise error. ApiException(Tox_Err_New(err))
97
51
98
52
install_handlers(self ._get())
99
53
@@ -109,13 +63,13 @@ cdef class Core:
109
63
110
64
cdef Tox * _get(self ) except * :
111
65
if self ._ptr is NULL :
112
- raise UseAfterFreeException()
66
+ raise error. UseAfterFreeException()
113
67
return self ._ptr
114
68
115
69
@property
116
70
def savedata (self ) -> bytes:
117
- cdef size_t size = tox_get_savedata_size(self ._get())
118
- cdef uint8_t * data = < uint8_t* > malloc(size * sizeof(uint8_t))
71
+ size = tox_get_savedata_size(self ._get())
72
+ data = < uint8_t* > malloc(size * sizeof(uint8_t))
119
73
try:
120
74
tox_get_savedata(self._get(), data )
121
75
return data[:size]
@@ -124,7 +78,7 @@ cdef class Core:
124
78
125
79
def bootstrap(self , host: str , port: int , public_key: bytes ) -> bool:
126
80
_check_len("public_key", public_key , tox_public_key_size())
127
- cdef Tox_Err_Bootstrap err = TOX_ERR_BOOTSTRAP_OK
81
+ err = TOX_ERR_BOOTSTRAP_OK
128
82
return tox_bootstrap(self._get(), host.encode("utf-8"), port , public_key , &err )
129
83
130
84
@property
@@ -143,8 +97,8 @@ cdef class Core:
143
97
144
98
@property
145
99
def address(self ) -> bytes:
146
- cdef size_t size = tox_address_size()
147
- cdef uint8_t * data = < uint8_t* > malloc(size * sizeof(uint8_t))
100
+ size = tox_address_size()
101
+ data = < uint8_t* > malloc(size * sizeof(uint8_t))
148
102
try:
149
103
tox_self_get_address(self._get(), data )
150
104
return data[:size]
@@ -157,8 +111,8 @@ cdef class Core:
157
111
158
112
@property
159
113
def public_key(self ) -> bytes:
160
- cdef size_t size = tox_public_key_size()
161
- cdef uint8_t * data = < uint8_t* > malloc(size * sizeof(uint8_t))
114
+ size = tox_public_key_size()
115
+ data = < uint8_t* > malloc(size * sizeof(uint8_t))
162
116
try:
163
117
tox_self_get_public_key(self._get(), data )
164
118
return data[:tox_public_key_size()]
@@ -167,8 +121,8 @@ cdef class Core:
167
121
168
122
@property
169
123
def secret_key(self ) -> bytes:
170
- cdef size_t size = tox_secret_key_size()
171
- cdef uint8_t * data = < uint8_t* > malloc(size * sizeof(uint8_t))
124
+ size = tox_secret_key_size()
125
+ data = < uint8_t* > malloc(size * sizeof(uint8_t))
172
126
try:
173
127
tox_self_get_secret_key(self._get(), data )
174
128
return data[:tox_secret_key_size()]
@@ -177,8 +131,8 @@ cdef class Core:
177
131
178
132
@property
179
133
def name(self ) -> bytes:
180
- cdef size_t size = tox_self_get_name_size(self ._get())
181
- cdef uint8_t * data = < uint8_t* > malloc(size * sizeof(uint8_t))
134
+ size = tox_self_get_name_size(self ._get())
135
+ data = < uint8_t* > malloc(size * sizeof(uint8_t))
182
136
try:
183
137
tox_self_get_name(self._get(), data )
184
138
return data[:size]
@@ -187,14 +141,14 @@ cdef class Core:
187
141
188
142
@name.setter
189
143
def name(self , name: bytes ) -> None:
190
- cdef Tox_Err_Set_Info err = TOX_ERR_SET_INFO_OK
144
+ err = TOX_ERR_SET_INFO_OK
191
145
tox_self_set_name(self._get(), name , len(name ), &err )
192
- if err: raise ApiException(Tox_Err_Set_Info(err ))
146
+ if err: raise error. ApiException(Tox_Err_Set_Info(err ))
193
147
194
148
@property
195
149
def status_message(self ) -> bytes:
196
- cdef size_t size = tox_self_get_status_message_size(self ._get())
197
- cdef uint8_t * data = < uint8_t* > malloc(size * sizeof(uint8_t))
150
+ size = tox_self_get_status_message_size(self ._get())
151
+ data = < uint8_t* > malloc(size * sizeof(uint8_t))
198
152
try:
199
153
tox_self_get_status_message(self._get(), data )
200
154
return data[:size]
@@ -203,9 +157,9 @@ cdef class Core:
203
157
204
158
@status_message.setter
205
159
def status_message(self , status_message: bytes ) -> None:
206
- cdef Tox_Err_Set_Info err = TOX_ERR_SET_INFO_OK
160
+ err = TOX_ERR_SET_INFO_OK
207
161
tox_self_set_status_message(self._get(), status_message , len(status_message ), &err )
208
- if err: raise ApiException(Tox_Err_Set_Info(err ))
162
+ if err: raise error. ApiException(Tox_Err_Set_Info(err ))
209
163
210
164
@property
211
165
def status(self ) -> Tox_User_Status:
@@ -217,17 +171,17 @@ cdef class Core:
217
171
218
172
def friend_add(self , address: bytes , message: bytes ):
219
173
_check_len(" address" , address, tox_address_size())
220
- cdef Tox_Err_Friend_Add err = TOX_ERR_FRIEND_ADD_OK
174
+ err = TOX_ERR_FRIEND_ADD_OK
221
175
tox_friend_add(self ._get(), address, message, len (message), & err)
222
- if err: raise ApiException(Tox_Err_Friend_Add(err))
176
+ if err: raise error. ApiException(Tox_Err_Friend_Add(err))
223
177
224
178
def friend_add_norequest (self , public_key: bytes ):
225
179
_check_len(" public_key" , public_key, tox_public_key_size())
226
- cdef Tox_Err_Friend_Add err = TOX_ERR_FRIEND_ADD_OK
180
+ err = TOX_ERR_FRIEND_ADD_OK
227
181
tox_friend_add_norequest(self ._get(), public_key, & err)
228
- if err: raise ApiException(Tox_Err_Friend_Add(err))
182
+ if err: raise error. ApiException(Tox_Err_Friend_Add(err))
229
183
230
184
def friend_delete (self , friend_number: int ):
231
- cdef Tox_Err_Friend_Delete err = TOX_ERR_FRIEND_DELETE_OK
185
+ err = TOX_ERR_FRIEND_DELETE_OK
232
186
tox_friend_delete(self ._get(), friend_number, & err)
233
- if err: raise ApiException(Tox_Err_Friend_Delete(err))
187
+ if err: raise error. ApiException(Tox_Err_Friend_Delete(err))
0 commit comments