diff --git a/coreapi/authentication.c b/coreapi/authentication.c index ec956f5f1..773e31fc0 100644 --- a/coreapi/authentication.c +++ b/coreapi/authentication.c @@ -484,7 +484,7 @@ void linphone_core_remove_auth_info(LinphoneCore *lc, const LinphoneAuthInfo *in /** * Returns an unmodifiable list of currently entered LinphoneAuthInfo. * @param[in] lc The LinphoneCore object - * @return \mslist{LinphoneAuthInfo} + * @return \bctbx_list{LinphoneAuthInfo} **/ const bctbx_list_t *linphone_core_get_auth_info_list(const LinphoneCore *lc){ return lc->auth_info; diff --git a/coreapi/conference.h b/coreapi/conference.h index 269e442f1..1359327cc 100644 --- a/coreapi/conference.h +++ b/coreapi/conference.h @@ -103,7 +103,7 @@ LINPHONE_PUBLIC int linphone_conference_remove_participant(LinphoneConference *o * The returned bctbx_list_t contains URIs of all participant. That list must be * freed after use and each URI must be unref with linphone_address_unref() * @param obj A #LinphoneConference - * @return \mslist{LinphoneAddress} + * @return \bctbx_list{LinphoneAddress} */ LINPHONE_PUBLIC bctbx_list_t *linphone_conference_get_participants(const LinphoneConference *obj); diff --git a/coreapi/friendlist.h b/coreapi/friendlist.h index 78ff3ca2f..c4c3b78cb 100644 --- a/coreapi/friendlist.h +++ b/coreapi/friendlist.h @@ -87,7 +87,7 @@ LINPHONE_PUBLIC void linphone_core_remove_friend_list(LinphoneCore *lc, Linphone /** * Retrieves the list of LinphoneFriendList from the core. * @param[in] lc LinphoneCore object - * @return \mslist{LinphoneFriendList} a list of LinphoneFriendList + * @return \bctbx_list{LinphoneFriendList} a list of LinphoneFriendList */ LINPHONE_PUBLIC const bctbx_list_t * linphone_core_get_friends_lists(const LinphoneCore *lc); @@ -196,7 +196,7 @@ LINPHONE_PUBLIC LinphoneFriendListStatus linphone_friend_list_remove_friend(Linp /** * Retrieves the list of LinphoneFriend from this LinphoneFriendList. * @param[in] list LinphoneFriendList object - * @return \mslist{LinphoneFriend} a list of LinphoneFriend + * @return \bctbx_list{LinphoneFriend} a list of LinphoneFriend */ LINPHONE_PUBLIC const bctbx_list_t * linphone_friend_list_get_friends(const LinphoneFriendList *list); diff --git a/coreapi/help/Doxyfile.in b/coreapi/help/Doxyfile.in index b0230913f..f3b62161a 100644 --- a/coreapi/help/Doxyfile.in +++ b/coreapi/help/Doxyfile.in @@ -228,7 +228,7 @@ TAB_SIZE = 8 # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines. -ALIASES = "mslist{1}=A list of \ref \1 objects. \xmlonly \1 \endxmlonly" +ALIASES = "bctbx_list{1}=A list of \ref \1 objects. \xmlonly \1 \endxmlonly" # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding "class=itcl::class" diff --git a/coreapi/linphone_tunnel.h b/coreapi/linphone_tunnel.h index 399875f46..5716b4fc3 100644 --- a/coreapi/linphone_tunnel.h +++ b/coreapi/linphone_tunnel.h @@ -227,7 +227,7 @@ LINPHONE_PUBLIC void linphone_tunnel_remove_server(LinphoneTunnel *tunnel, Linph /** * Get added servers * @param tunnel LinphoneTunnel object - * @return \mslist{LinphoneTunnelConfig} + * @return \bctbx_list{LinphoneTunnelConfig} */ LINPHONE_PUBLIC const bctbx_list_t *linphone_tunnel_get_servers(const LinphoneTunnel *tunnel); diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index e98633ca7..b53345f4a 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -1975,7 +1975,7 @@ LinphoneAddress *linphone_core_get_primary_contact_parsed(LinphoneCore *lc){ /** * Sets the list of audio codecs. * @param[in] lc The LinphoneCore object - * @param[in] codecs \mslist{PayloadType} + * @param[in] codecs \bctbx_list{PayloadType} * @return 0 * * @ingroup media_parameters @@ -1993,7 +1993,7 @@ int linphone_core_set_audio_codecs(LinphoneCore *lc, bctbx_list_t *codecs){ /** * Sets the list of video codecs. * @param[in] lc The LinphoneCore object - * @param[in] codecs \mslist{PayloadType} + * @param[in] codecs \bctbx_list{PayloadType} * @return 0 * * @ingroup media_parameters @@ -4130,7 +4130,7 @@ int linphone_core_terminate_all_calls(LinphoneCore *lc){ /** * Returns the current list of calls. * @param[in] lc The LinphoneCore object - * @return \mslist{LinphoneCall} + * @return \bctbx_list{LinphoneCall} * * Note that this list is read-only and might be changed by the core after a function call to linphone_core_iterate(). * Similarly the LinphoneCall objects inside it might be destroyed without prior notice. diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index 4eb5335f6..b2392c648 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -1583,7 +1583,7 @@ LINPHONE_PUBLIC int linphone_chat_room_get_history_size(LinphoneChatRoom *cr); * Gets nb_message most recent messages from cr chat room, sorted from oldest to most recent. * @param[in] cr The #LinphoneChatRoom object corresponding to the conversation for which messages should be retrieved * @param[in] nb_message Number of message to retrieve. 0 means everything. - * @return \mslist{LinphoneChatMessage} + * @return \bctbx_list{LinphoneChatMessage} */ LINPHONE_PUBLIC bctbx_list_t *linphone_chat_room_get_history(LinphoneChatRoom *cr,int nb_message); @@ -1592,7 +1592,7 @@ LINPHONE_PUBLIC bctbx_list_t *linphone_chat_room_get_history(LinphoneChatRoom *c * @param[in] cr The #LinphoneChatRoom object corresponding to the conversation for which messages should be retrieved * @param[in] begin The first message of the range to be retrieved. History most recent message has index 0. * @param[in] end The last message of the range to be retrieved. History oldest message has index of history size - 1 (use #linphone_chat_room_get_history_size to retrieve history size) - * @return \mslist{LinphoneChatMessage} + * @return \bctbx_list{LinphoneChatMessage} */ LINPHONE_PUBLIC bctbx_list_t *linphone_chat_room_get_history_range(LinphoneChatRoom *cr, int begin, int end); @@ -1643,7 +1643,7 @@ LINPHONE_PUBLIC uint32_t linphone_chat_room_get_char(const LinphoneChatRoom *cr) /** * Returns an list of chat rooms * @param[in] lc #LinphoneCore object - * @return \mslist{LinphoneChatRoom} + * @return \bctbx_list{LinphoneChatRoom} **/ LINPHONE_PUBLIC const bctbx_list_t* linphone_core_get_chat_rooms(LinphoneCore *lc); LINPHONE_PUBLIC unsigned int linphone_chat_message_store(LinphoneChatMessage *msg); @@ -2912,7 +2912,7 @@ LINPHONE_PUBLIC void linphone_core_set_dns_servers(LinphoneCore *lc, const bctbx /** * Returns the list of available audio codecs. * @param[in] lc The LinphoneCore object - * @return \mslist{PayloadType} + * @return \bctbx_list{PayloadType} * * This list is unmodifiable. The ->data field of the bctbx_list_t points a PayloadType * structure holding the codec information. @@ -2927,7 +2927,7 @@ LINPHONE_PUBLIC int linphone_core_set_audio_codecs(LinphoneCore *lc, bctbx_list_ /** * Returns the list of available video codecs. * @param[in] lc The LinphoneCore object - * @return \mslist{PayloadType} + * @return \bctbx_list{PayloadType} * * This list is unmodifiable. The ->data field of the bctbx_list_t points a PayloadType * structure holding the codec information. @@ -2942,7 +2942,7 @@ LINPHONE_PUBLIC int linphone_core_set_video_codecs(LinphoneCore *lc, bctbx_list_ /** * Returns the list of available text codecs. * @param[in] lc The LinphoneCore object - * @return \mslist{PayloadType} + * @return \bctbx_list{PayloadType} * * This list is unmodifiable. The ->data field of the bctbx_list_t points a PayloadType * structure holding the codec information. @@ -3078,7 +3078,7 @@ LINPHONE_PUBLIC void linphone_core_remove_proxy_config(LinphoneCore *lc, Linphon /** * Returns an unmodifiable list of entered proxy configurations. * @param[in] lc The LinphoneCore object - * @return \mslist{LinphoneProxyConfig} + * @return \bctbx_list{LinphoneProxyConfig} **/ LINPHONE_PUBLIC const bctbx_list_t *linphone_core_get_proxy_config_list(const LinphoneCore *lc); @@ -3539,7 +3539,7 @@ LINPHONE_PUBLIC void linphone_core_set_rtp_no_xmit_on_audio_mute(LinphoneCore *l /** * Get the list of call logs (past calls). * @param[in] lc LinphoneCore object - * @return \mslist{LinphoneCallLog} + * @return \bctbx_list{LinphoneCallLog} **/ LINPHONE_PUBLIC const bctbx_list_t * linphone_core_get_call_logs(LinphoneCore *lc); @@ -3548,7 +3548,7 @@ LINPHONE_PUBLIC const bctbx_list_t * linphone_core_get_call_logs(LinphoneCore *l * At the contrary of linphone_core_get_call_logs, it is your responsability to unref the logs and free this list once you are done using it. * @param[in] lc LinphoneCore object * @param[in] addr LinphoneAddress object - * @return \mslist{LinphoneCallLog} + * @return \bctbx_list{LinphoneCallLog} **/ LINPHONE_PUBLIC bctbx_list_t * linphone_core_get_call_history_for_address(LinphoneCore *lc, const LinphoneAddress *addr); diff --git a/coreapi/linphonefriend.h b/coreapi/linphonefriend.h index af6f995d8..2e48ca96e 100644 --- a/coreapi/linphonefriend.h +++ b/coreapi/linphonefriend.h @@ -175,7 +175,7 @@ LINPHONE_PUBLIC void linphone_friend_add_address(LinphoneFriend *lf, const Linph /** * Returns a list of #LinphoneAddress for this friend * @param lf #LinphoneFriend object - * @return \mslist{LinphoneAddress} + * @return \bctbx_list{LinphoneAddress} */ LINPHONE_PUBLIC const bctbx_list_t* linphone_friend_get_addresses(const LinphoneFriend *lf); @@ -196,7 +196,7 @@ LINPHONE_PUBLIC void linphone_friend_add_phone_number(LinphoneFriend *lf, const /** * Returns a list of phone numbers for this friend * @param lf #LinphoneFriend object - * @return \mslist{const char *} + * @return \bctbx_list{const char *} */ LINPHONE_PUBLIC bctbx_list_t* linphone_friend_get_phone_numbers(LinphoneFriend *lf); @@ -444,7 +444,7 @@ LINPHONE_PUBLIC void linphone_core_reject_subscriber(LinphoneCore *lc, LinphoneF /** * Get Buddy list of LinphoneFriend * @param[in] lc #LinphoneCore object - * @return \mslist{LinphoneFriend} + * @return \bctbx_list{LinphoneFriend} * @deprecated use linphone_core_get_friends_lists() or linphone_friend_list_get_friends() instead. */ LINPHONE_PUBLIC const bctbx_list_t * linphone_core_get_friend_list(const LinphoneCore *lc); diff --git a/coreapi/lpconfig.h b/coreapi/lpconfig.h index 59269098e..09a1f8d97 100644 --- a/coreapi/lpconfig.h +++ b/coreapi/lpconfig.h @@ -111,8 +111,8 @@ LINPHONE_PUBLIC const char *lp_config_get_string(const LpConfig *lpconfig, const * @param[in] lpconfig A LpConfig object * @param[in] section The section from which to retrieve a configuration item * @param[in] key The name of the configuration item to retrieve - * @param[in] default_list \mslist{const char *} - * @return \mslist{const char *} + * @param[in] default_list \bctbx_list{const char *} + * @return \bctbx_list{const char *} */ LINPHONE_PUBLIC bctbx_list_t * lp_config_get_string_list(const LpConfig *lpconfig, const char *section, const char *key, bctbx_list_t *default_list); @@ -162,7 +162,7 @@ LINPHONE_PUBLIC void lp_config_set_string(LpConfig *lpconfig,const char *section * @param[in] lpconfig A LpConfig object * @param[in] section The name of the section to put the configuration item into * @param[in] key The name of the configuration item to set - * @param[in] value \mslist{const char *} The value to set + * @param[in] value \bctbx_list{const char *} The value to set */ LINPHONE_PUBLIC void lp_config_set_string_list(LpConfig *lpconfig, const char *section, const char *key, const bctbx_list_t *value); diff --git a/coreapi/vcard.h b/coreapi/vcard.h index 7e72b5347..709aff046 100644 --- a/coreapi/vcard.h +++ b/coreapi/vcard.h @@ -88,7 +88,7 @@ LINPHONE_PUBLIC void linphone_vcard_free(LinphoneVcard *vCard); * Uses belcard to parse the content of a file and returns all the vcards it contains as LinphoneVcards, or NULL if it contains none. * @param[in] context the vCard context to use (speed up the process by not creating a Belcard parser each time) * @param[in] file the path to the file to parse - * @return \mslist{LinphoneVcard} + * @return \bctbx_list{LinphoneVcard} */ LINPHONE_PUBLIC bctbx_list_t* linphone_vcard_context_get_vcard_list_from_file(LinphoneVcardContext *context, const char *file); @@ -96,7 +96,7 @@ LINPHONE_PUBLIC bctbx_list_t* linphone_vcard_context_get_vcard_list_from_file(Li * Uses belcard to parse the content of a buffer and returns all the vcards it contains as LinphoneVcards, or NULL if it contains none. * @param[in] context the vCard context to use (speed up the process by not creating a Belcard parser each time) * @param[in] buffer the buffer to parse - * @return \mslist{LinphoneVcard} + * @return \bctbx_list{LinphoneVcard} */ LINPHONE_PUBLIC bctbx_list_t* linphone_vcard_context_get_vcard_list_from_buffer(LinphoneVcardContext *context, const char *buffer); @@ -181,7 +181,7 @@ void linphone_vcard_edit_main_sip_address(LinphoneVcard *vCard, const char *sip_ /** * Returns the list of SIP addresses (as LinphoneAddress) in the vCard (all the IMPP attributes that has an URI value starting by "sip:") or NULL * @param[in] vCard the LinphoneVcard - * @return const \mslist{LinphoneAddress *} + * @return \bctbx_list{LinphoneAddress} */ LINPHONE_PUBLIC const bctbx_list_t* linphone_vcard_get_sip_addresses(LinphoneVcard *vCard); @@ -202,7 +202,7 @@ void linphone_vcard_remove_phone_number(LinphoneVcard *vCard, const char *phone) /** * Returns the list of phone numbers (as string) in the vCard (all the TEL attributes) or NULL * @param[in] vCard the LinphoneVcard - * @return \mslist{const char *} + * @return \bctbx_list{const char *} */ LINPHONE_PUBLIC bctbx_list_t* linphone_vcard_get_phone_numbers(const LinphoneVcard *vCard); @@ -293,4 +293,4 @@ void linphone_vcard_clean_cache(LinphoneVcard *vCard); } #endif -#endif \ No newline at end of file +#endif diff --git a/tools/genapixml.py b/tools/genapixml.py index 4c9d3374a..4326055ad 100755 --- a/tools/genapixml.py +++ b/tools/genapixml.py @@ -305,7 +305,7 @@ class Project: para.remove(n) for n in para.findall('.//ref'): n.attrib = {} - for n in para.findall(".//mslist"): + for n in para.findall(".//bctbx_list"): para.remove(n) if descriptionNode.tag == 'parameterdescription': descriptionNode.tag = 'description' @@ -439,7 +439,7 @@ class Project: returndesc = node.find("./detaileddescription/para/simplesect[@kind='return']") if returndesc is not None: if returnarg.ctype == 'MSList' or returnarg.ctype == 'bctbx_list_t': - n = returndesc.find('.//mslist') + n = returndesc.find('.//bctbxlist') if n is not None: returnarg.containedType = n.text returnarg.description = self.__cleanDescription(returndesc) @@ -510,7 +510,7 @@ class Project: returndesc = node.find("./detaileddescription/para/simplesect[@kind='return']") if returndesc is not None: if returnarg.ctype == 'MSList' or returnarg.ctype == 'bctbx_list_t': - n = returndesc.find('.//mslist') + n = returndesc.find('.//bctbxlist') if n is not None: returnarg.containedType = n.text returnarg.description = self.__cleanDescription(returndesc) @@ -533,7 +533,7 @@ class Project: for paramdesc in paramdescs: if arg.name == paramdesc.find('./parameternamelist').find('./parametername').text: if arg.ctype == 'MSList' or arg.ctype == 'bctbx_list_t': - n = paramdesc.find('.//mslist') + n = paramdesc.find('.//bctbxlist') if n is not None: arg.containedType = n.text arg.description = self.__cleanDescription(paramdesc.find('./parameterdescription')) diff --git a/tools/python/apixml2python/handwritten_declarations.mustache b/tools/python/apixml2python/handwritten_declarations.mustache index ca7cfd1c4..5f87cc257 100644 --- a/tools/python/apixml2python/handwritten_declarations.mustache +++ b/tools/python/apixml2python/handwritten_declarations.mustache @@ -24,8 +24,8 @@ typedef struct { LCSipTransports lcst; } pylinphone_SipTransportsObject; -PyObject * PyList_FromMSListOfString(const bctbx_list_t *msl); -bctbx_list_t * PyList_AsMSListOfString(PyObject *pyl); +PyObject * PyList_FromBctbxListOfString(const bctbx_list_t *msl); +bctbx_list_t * PyList_AsBctbxListOfString(PyObject *pyl); int PyLinphoneVideoSize_Check(PyObject *p); MSVideoSize PyLinphoneVideoSize_AsMSVideoSize(PyObject *obj); @@ -44,4 +44,4 @@ static int pylinphone_Buffer_set_content(PyObject *self, PyObject *value, void * static PyObject * pylinphone_Content_get_buffer(PyObject *self, void *closure); static int pylinphone_Content_set_buffer(PyObject *self, PyObject *value, void *closure); -static PyObject * pylinphone_LpConfig_get_sections_names(PyObject *self, void *closure); \ No newline at end of file +static PyObject * pylinphone_LpConfig_get_sections_names(PyObject *self, void *closure); diff --git a/tools/python/apixml2python/handwritten_definitions.mustache b/tools/python/apixml2python/handwritten_definitions.mustache index f87dfe7f2..fb27b8864 100644 --- a/tools/python/apixml2python/handwritten_definitions.mustache +++ b/tools/python/apixml2python/handwritten_definitions.mustache @@ -1,4 +1,4 @@ -PyObject * PyList_FromMSListOfString(const bctbx_list_t *msl) { +PyObject * PyList_FromBctbxListOfString(const bctbx_list_t *msl) { PyObject *pyl = PyList_New(0); while (msl != NULL) { PyObject *item = Py_BuildValue("z", (const char *)msl->data); @@ -8,7 +8,7 @@ PyObject * PyList_FromMSListOfString(const bctbx_list_t *msl) { return pyl; } -bctbx_list_t * PyList_AsMSListOfString(PyObject *pyl) { +bctbx_list_t * PyList_AsBctbxListOfString(PyObject *pyl) { bctbx_list_t *msl = NULL; Py_ssize_t idx; Py_ssize_t size = PyList_Size(pyl); diff --git a/tools/python/apixml2python/linphone.py b/tools/python/apixml2python/linphone.py index 288660327..483cd93ed 100644 --- a/tools/python/apixml2python/linphone.py +++ b/tools/python/apixml2python/linphone.py @@ -53,6 +53,10 @@ def compute_event_name(s, className): first = False return event_name +def is_const_from_complete_type(complete_type): + splitted_type = complete_type.split(' ') + return 'const' in splitted_type + class HandWrittenCode: def __init__(self, _class, name, func_list, doc = ''): @@ -95,6 +99,7 @@ class ArgumentType: self.check_condition = None self.convert_code = None self.convert_from_func = None + self.free_convert_result_func = None self.fmt_str = 'O' self.cfmt_str = '%p' self.cnativefmt_str = '%p' @@ -102,7 +107,7 @@ class ArgumentType: self.cast_convert_func_result = True self.__compute() if (self.basic_type == 'MSList' or self.basic_type == 'bctbx_list_t') and self.contained_type is not None and self.contained_type != 'const char *': - self.linphone_module.mslist_types.add(self.contained_type) + self.linphone_module.bctbxlist_types.add(self.contained_type) def __compute(self): splitted_type = self.complete_type.split(' ') @@ -217,12 +222,14 @@ class ArgumentType: elif self.basic_type == 'MSList' or self.basic_type == 'bctbx_list_t': if self.contained_type == 'const char *': self.type_str = 'list of string' - self.convert_code = "{result_name}{result_suffix} = {cast}PyList_AsMSListOfString({arg_name});\n" - self.convert_from_func = 'PyList_FromMSListOfString' + self.convert_code = "{result_name}{result_suffix} = {cast}PyList_AsBctbxListOfString({arg_name});\n" + self.convert_from_func = 'PyList_FromBctbxListOfString' else: self.type_str = 'list of linphone.' + self.contained_type - self.convert_code = "{result_name}{result_suffix} = {cast}PyList_AsMSListOf" + self.contained_type + "({arg_name});\n" - self.convert_from_func = 'PyList_FromMSListOf' + self.contained_type + self.convert_code = "{result_name}{result_suffix} = {cast}PyList_AsBctbxListOf" + self.contained_type + "({arg_name});\n" + self.convert_from_func = 'PyList_FromBctbxListOf' + self.contained_type + if not is_const_from_complete_type(self.complete_type): + self.free_convert_result_func = "bctbx_list_free" self.check_condition = "!PyList_Check({arg_name})" self.fmt_str = 'O' self.cfmt_str = '%p' @@ -372,6 +379,7 @@ class MethodDefinition: def format_c_function_call(self): arg_names = [] c_function_call_code = '' + cfree_argument_code = '' for xml_method_arg in self.xml_method_args: arg_name = "_" + xml_method_arg.get('name') arg_type = xml_method_arg.get('type') @@ -382,6 +390,10 @@ class MethodDefinition: arg_names.append(arg_name + "_native_ptr") elif argument_type.fmt_str == 'O' and argument_type.convert_code is not None: arg_names.append(arg_name + "_native_obj") + if argument_type.free_convert_result_func is not None and not is_const_from_complete_type(arg_complete_type): + cfree_argument_code = \ +"""{free_func}({arg_name}_native_obj); +""".format(free_func=argument_type.free_convert_result_func, arg_name=arg_name) else: arg_names.append(arg_name) if is_callback(self.return_complete_type): @@ -412,6 +424,10 @@ class MethodDefinition: convert_from_code = \ """pyresult = {convert_func}(cresult); """.format(convert_func=return_argument_type.convert_from_func) + if return_argument_type.free_convert_result_func is not None: + cfree_code = \ +"""{free_func}(cresult); +""".format(free_func=return_argument_type.free_convert_result_func) result_variable = 'pyresult' else: result_variable = 'cresult' @@ -421,12 +437,14 @@ class MethodDefinition: cfree_code = 'ms_free(cresult);'; body = \ """ {c_function_call_code} + {cfree_argument_code} pylinphone_dispatch_messages(); {from_native_pointer_code} {convert_from_code} {build_value_code} {cfree_code} """.format(c_function_call_code=c_function_call_code, + cfree_argument_code=cfree_argument_code, from_native_pointer_code=from_native_pointer_code, convert_from_code=convert_from_code, build_value_code=build_value_code, @@ -535,12 +553,6 @@ class MethodDefinition: self.self_arg = self.xml_method_args[0] self.xml_method_args = self.xml_method_args[1:] - def remove_const_from_complete_type(self, complete_type): - splitted_type = complete_type.split(' ') - while 'const' in splitted_type: - splitted_type.remove('const') - return ' '.join(splitted_type) - def find_class_definition(self, basic_type): basic_type = strip_leading_linphone(basic_type) for c in self.linphone_module.classes: @@ -799,15 +811,21 @@ class SetterMethodDefinition(MethodDefinition): """ {method_name}(native_ptr, pylinphone_{class_name}_callback_{callback_name}); pylinphone_dispatch_messages(); """.format(method_name=self.method_node.get('name'), class_name=self.class_['class_name'], callback_name=compute_event_name(self.first_argument_type.complete_type, self.class_['class_name'])) + cfree_argument_code = '' suffix = '' if self.first_argument_type.fmt_str == 'O' and self.first_argument_type.use_native_pointer: suffix = '_native_ptr' elif self.first_argument_type.fmt_str == 'O' and self.first_argument_type.convert_code is not None: suffix = '_native_obj' + if self.first_argument_type.free_convert_result_func is not None and not is_const_from_complete_type(self.first_argument_type.complete_type): + cfree_argument_code = \ +"""{free_func}({arg_name}_native_obj); +""".format(free_func=self.first_argument_type.free_convert_result_func, arg_name="_" + self.first_arg_name) return \ """ {method_name}(native_ptr, {arg_name}{suffix}); + {cfree_argument_code} pylinphone_dispatch_messages(); -""".format(arg_name="_" + self.first_arg_name, method_name=self.method_node.get('name'), suffix=suffix) +""".format(arg_name="_" + self.first_arg_name, method_name=self.method_node.get('name'), suffix=suffix, cfree_argument_code=cfree_argument_code) def format_return_trace(self): return "\tpylinphone_trace(-1, \"[PYLINPHONE] <<< %s -> 0\", __FUNCTION__);\n" @@ -989,7 +1007,7 @@ class LinphoneModule(object): def __init__(self, tree, blacklisted_classes, blacklisted_events, blacklisted_functions, hand_written_codes): self.internal_instance_method_names = ['destroy', 'ref', 'unref'] self.internal_property_names = ['user_data'] - self.mslist_types = Set([]) + self.bctbxlist_types = Set([]) self.enums = [] self.enum_names = [] self.cfunction2methodmap = {} @@ -1225,14 +1243,14 @@ class LinphoneModule(object): except Exception, e: e.args += (c['class_name'], 'dealloc_body') raise - # Convert mslist_types to a list of dictionaries for the template + # Convert bctbxlist_types to a list of dictionaries for the template d = [] - for mslist_type in self.mslist_types: + for bctbxlist_type in self.bctbxlist_types: t = {} - t['c_contained_type'] = mslist_type - t['python_contained_type'] = strip_leading_linphone(mslist_type) + t['c_contained_type'] = bctbxlist_type + t['python_contained_type'] = strip_leading_linphone(bctbxlist_type) d.append(t) - self.mslist_types = d + self.bctbxlist_types = d def __format_doc_node(self, node): desc = '' diff --git a/tools/python/apixml2python/linphone_module.mustache b/tools/python/apixml2python/linphone_module.mustache index aca0bd6ca..deadebe2b 100644 --- a/tools/python/apixml2python/linphone_module.mustache +++ b/tools/python/apixml2python/linphone_module.mustache @@ -71,8 +71,8 @@ static PyObject * pylinphone_{{class_name}}_instance_method_{{method_name}}(PyOb {{/class_instance_hand_written_methods}} {{/classes}} -{{#mslist_types}} -PyObject * PyList_FromMSListOf{{c_contained_type}}(const bctbx_list_t *msl) { +{{#bctbxlist_types}} +PyObject * PyList_FromBctbxListOf{{c_contained_type}}(const bctbx_list_t *msl) { PyObject *pyl = PyList_New(0); while (msl != NULL) { {{c_contained_type}} *native_ptr = ({{c_contained_type}} *)msl->data; @@ -83,7 +83,7 @@ PyObject * PyList_FromMSListOf{{c_contained_type}}(const bctbx_list_t *msl) { return pyl; } -bctbx_list_t * PyList_AsMSListOf{{c_contained_type}}(PyObject *pyl) { +bctbx_list_t * PyList_AsBctbxListOf{{c_contained_type}}(PyObject *pyl) { bctbx_list_t *msl = NULL; Py_ssize_t idx; Py_ssize_t size = PyList_Size(pyl); @@ -95,7 +95,7 @@ bctbx_list_t * PyList_AsMSListOf{{c_contained_type}}(PyObject *pyl) { return msl; } -{{/mslist_types}} +{{/bctbxlist_types}} {{#core_events}} {{{event_callback_definition}}}