diff --git a/README.macos.md b/README.macos.md index 40160a654..5e34f88ad 100644 --- a/README.macos.md +++ b/README.macos.md @@ -40,7 +40,7 @@ Install `GTK`. It is recommended to use the `quartz` backend for better integrat ##### Linphone library (liblinphone) brew install intltool libtool wget pkg-config automake libantlr3.4c \ - antlr gettext speex ffmpeg readline libvpx opus + homebrew/versions/antlr3 gettext speex ffmpeg readline libvpx opus ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize brew link --force gettext #readline is required from linphonec.c otherwise compilation will fail diff --git a/build/windows10/liblinphone-tester/liblinphone-tester_TemporaryKey.pfx b/build/windows10/liblinphone-tester/liblinphone-tester_TemporaryKey.pfx index 19e757bfa..3aeb9f3b9 100644 Binary files a/build/windows10/liblinphone-tester/liblinphone-tester_TemporaryKey.pfx and b/build/windows10/liblinphone-tester/liblinphone-tester_TemporaryKey.pfx differ diff --git a/build/windows10/liblinphone/liblinphone.vcxproj b/build/windows10/liblinphone/liblinphone.vcxproj index 1ac61e9b3..5d1809af7 100644 --- a/build/windows10/liblinphone/liblinphone.vcxproj +++ b/build/windows10/liblinphone/liblinphone.vcxproj @@ -175,10 +175,10 @@ false - version.bat + version.bat - Batch script to get the git version + Batch script to get the git version diff --git a/configure.ac b/configure.ac index a401b4bb1..191c7fd7d 100644 --- a/configure.ac +++ b/configure.ac @@ -632,7 +632,7 @@ AC_ARG_ENABLE(zrtp, dnl this options are just for passing to mediastreamer2 subproject AC_ARG_ENABLE(dtls, - [AS_HELP_STRING([--enable-dtls], [Turn on dtls support - requires polarssl > 1.4])], + [AS_HELP_STRING([--enable-dtls], [Turn on srtp-dtls support - requires polarssl > 1.4])], [case "${enableval}" in yes) dtls=true ;; no) dtls=false ;; diff --git a/console/commands.c b/console/commands.c index d24bfa16b..539d33512 100644 --- a/console/commands.c +++ b/console/commands.c @@ -2376,12 +2376,12 @@ static int lpc_cmd_rtp_no_xmit_on_audio_mute(LinphoneCore *lc, char *args) #ifdef VIDEO_ENABLED static int _lpc_cmd_video_window(LinphoneCore *lc, char *args, bool_t is_preview){ char subcommand[64]; - int a,b; + long a,b; int err; VideoParams *params=is_preview ? &lpc_preview_params : &lpc_video_params; if (!args) return 0; - err=sscanf(args,"%63s %i %i",subcommand,&a,&b); + err=sscanf(args,"%63s %ld %ld",subcommand,&a,&b); if (err>=1){ if (strcmp(subcommand,"pos")==0){ if (err<3) return 0; @@ -2403,15 +2403,15 @@ static int _lpc_cmd_video_window(LinphoneCore *lc, char *args, bool_t is_preview if (is_preview) linphone_core_enable_video_preview (lc,FALSE); }else if (strcmp(subcommand,"id")==0){ if (err == 1){ - linphonec_out("vwindow id: 0x%x\n",is_preview ? linphone_core_get_native_preview_window_id (lc) : + linphonec_out("vwindow id: 0x%p\n",is_preview ? linphone_core_get_native_preview_window_id (lc) : linphone_core_get_native_video_window_id (lc)); return 1; } else if (err != 2) return 0; - params->wid=a; + params->wid=(void *)a; if (is_preview) - linphone_core_set_native_preview_window_id (lc,a); + linphone_core_set_native_preview_window_id(lc, (void *)a); else - linphone_core_set_native_video_window_id(lc,a); + linphone_core_set_native_video_window_id(lc, (void *)a); }else if (is_preview==TRUE){ if (strcmp(subcommand,"integrated")==0){ linphone_core_use_preview_window (lc,FALSE); diff --git a/console/linphonec.c b/console/linphonec.c index 78dd1e019..cdf06f474 100644 --- a/console/linphonec.c +++ b/console/linphonec.c @@ -65,15 +65,6 @@ #endif /*_WIN32_WCE*/ -#ifdef ENABLE_NLS -#include -#ifndef _ -#define _(String) gettext(String) -#endif -#else -#define _(something) (something) -#endif - #ifndef PACKAGE_DIR #define PACKAGE_DIR "" #endif @@ -164,7 +155,7 @@ static char zrtpsecrets[PATH_MAX]; static char usr_certificates_path[PATH_MAX]; static const char *factory_configfile_name=NULL; static char *sip_addr_to_call = NULL; /* for autocall */ -static int window_id = 0; /* 0=standalone window, or window id for embedding video */ +static void *window_id = NULL; /* NULL=standalone window, or window id for embedding video */ #if !defined(_WIN32_WCE) static ortp_pipe_t client_sock=ORTP_PIPE_INVALID; #endif /*_WIN32_WCE*/ @@ -714,16 +705,6 @@ linphonec_init(int argc, char **argv) default: break; } -#ifdef ENABLE_NLS - if (NULL == bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR)) - perror ("bindtextdomain failed"); -#ifndef __ARM__ - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); -#endif - textdomain (GETTEXT_PACKAGE); -#else - printf ("NLS disabled.\n"); -#endif linphonec_parse_cmdline(argc, argv); @@ -759,9 +740,9 @@ linphonec_init(int argc, char **argv) linphone_core_set_user_certificates_path(linphonec,usr_certificates_path); linphone_core_enable_video_capture(linphonec, vcap_enabled); linphone_core_enable_video_display(linphonec, display_enabled); - if (display_enabled && window_id != 0) + if (display_enabled && (window_id != NULL)) { - printf("Setting window_id: 0x%x\n", window_id); + printf("Setting window_id: 0x%p\n", window_id); linphone_core_set_native_video_window_id(linphonec,window_id); } @@ -985,28 +966,29 @@ static void x11_apply_video_params(VideoParams *params, Window window){ static void lpc_apply_video_params(){ - static unsigned long old_wid=0,old_pwid=0; - unsigned long wid=linphone_core_get_native_video_window_id (linphonec); - unsigned long pwid=linphone_core_get_native_preview_window_id (linphonec); + static void *old_wid=NULL; + static void *old_pwid=NULL; + void *wid=linphone_core_get_native_video_window_id(linphonec); + void *pwid=linphone_core_get_native_preview_window_id(linphonec); - if (wid!=0 && (lpc_video_params.refresh || old_wid!=wid)){ + if (wid!=NULL && (lpc_video_params.refresh || old_wid!=wid)){ lpc_video_params.refresh=FALSE; #ifdef HAVE_X11_XLIB_H if (lpc_video_params.wid==0){ // do not manage window if embedded - x11_apply_video_params(&lpc_video_params,wid); + x11_apply_video_params(&lpc_video_params,(Window)wid); } else { linphone_core_show_video(linphonec, lpc_video_params.show); } #endif } old_wid=wid; - if (pwid!=0 && (lpc_preview_params.refresh || old_pwid!=pwid)){ + if (pwid!=NULL && (lpc_preview_params.refresh || old_pwid!=pwid)){ lpc_preview_params.refresh=FALSE; #ifdef HAVE_X11_XLIB_H - /*printf("wid=%lu pwid=%lu\n",wid,pwid);*/ - if (lpc_preview_params.wid==0){ // do not manage window if embedded + /*printf("wid=%p pwid=%p\n",wid,pwid);*/ + if (lpc_preview_params.wid==NULL){ // do not manage window if embedded printf("Refreshing\n"); - x11_apply_video_params(&lpc_preview_params,pwid); + x11_apply_video_params(&lpc_preview_params,(Window)pwid); } #endif } @@ -1303,7 +1285,7 @@ linphonec_parse_cmdline(int argc, char **argv) arg_num++; if (arg_num < argc) { char *tmp; - window_id = strtol( argv[arg_num], &tmp, 0 ); + window_id = (void *)strtol( argv[arg_num], &tmp, 0 ); lpc_video_params.wid = window_id; } } diff --git a/console/linphonec.h b/console/linphonec.h index 3265d42ac..23c0ee5a0 100644 --- a/console/linphonec.h +++ b/console/linphonec.h @@ -99,7 +99,7 @@ typedef struct { typedef struct { int x,y,w,h; - unsigned long wid; + void *wid; bool_t show; bool_t refresh; } VideoParams; diff --git a/coreapi/CMakeLists.txt b/coreapi/CMakeLists.txt index 68f7b82b7..117d7b6c0 100644 --- a/coreapi/CMakeLists.txt +++ b/coreapi/CMakeLists.txt @@ -32,7 +32,6 @@ endif() set(SOURCE_FILES account_creator.c - account_creator.h address.c authentication.c bellesip_sal/sal_address_impl.c @@ -61,18 +60,13 @@ set(SOURCE_FILES enum.c enum.h event.c - event.h friend.c info.c ldap/ldapprovider.c lime.c linphonecall.c linphonecore.c - linphonecore.h - linphonecore_utils.h - linphonefriend.h linphone_tunnel_config.c - linphone_tunnel.h localplayer.c lpconfig.c lpconfig.h @@ -90,14 +84,31 @@ set(SOURCE_FILES sal.c siplogin.c sipsetup.c - sipsetup.h xml2lpc.c - xml2lpc.h xml.c xmlrpc.c - xmlrpc.h vtables.c ) + +set(HEADER_FILES + account_creator.h + buffer.h + call_log.h + call_params.h + content.h + event.h + linphonecore.h + linphonecore_utils.h + linphonefriend.h + linphonepresence.h + linphone_proxy_config.h + linphone_tunnel.h + lpc2xml.h + lpconfig.h + sipsetup.h + xml2lpc.h + xmlrpc.h +) if(ENABLE_TUNNEL) list(APPEND SOURCE_FILES linphone_tunnel.cc @@ -183,26 +194,6 @@ install(TARGETS linphone EXPORT LinphoneTargets PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE ) - -set(HEADER_FILES - account_creator.h - buffer.h - call_log.h - call_params.h - content.h - event.h - linphonecore.h - linphonecore_utils.h - linphonefriend.h - linphonepresence.h - linphone_tunnel.h - lpc2xml.h - lpconfig.h - sipsetup.h - xml2lpc.h - xmlrpc.h -) - install(FILES ${HEADER_FILES} DESTINATION include/linphone PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ diff --git a/coreapi/Makefile.am b/coreapi/Makefile.am index b16105aea..d4c4516ce 100644 --- a/coreapi/Makefile.am +++ b/coreapi/Makefile.am @@ -35,6 +35,7 @@ linphone_include_HEADERS=\ linphonecore_utils.h \ linphonefriend.h \ linphonepresence.h \ + linphone_proxy_config.h \ linphone_tunnel.h \ lpc2xml.h \ lpconfig.h \ @@ -59,17 +60,16 @@ liblinphone_la_SOURCES=\ dict.c \ ec-calibrator.c \ enum.c enum.h \ - event.c event.h \ + event.c \ friend.c \ info.c \ ldap/ldapprovider.c ldap/ldapprovider.h \ linphonecall.c \ - linphonecore.c linphonecore.h \ - linphonecore_utils.h \ + linphonecore.c \ localplayer.c \ lpc2xml.c \ lime.c lime.h\ - lpconfig.c lpconfig.h \ + lpconfig.c \ lsd.c \ message_storage.c \ misc.c \ @@ -82,7 +82,7 @@ liblinphone_la_SOURCES=\ remote_provisioning.c \ sal.c \ siplogin.c \ - sipsetup.c sipsetup.h \ + sipsetup.c \ xml2lpc.c \ xml.c \ xmlrpc.c \ diff --git a/coreapi/account_creator.c b/coreapi/account_creator.c index d93bd4a5e..23cdffb28 100644 --- a/coreapi/account_creator.c +++ b/coreapi/account_creator.c @@ -84,6 +84,7 @@ static void _linphone_account_creator_destroy(LinphoneAccountCreator *creator) { if (creator->domain) ms_free(creator->domain); if (creator->route) ms_free(creator->route); if (creator->email) ms_free(creator->email); + if (creator->display_name) ms_free(creator->display_name); ms_free(creator); } @@ -155,6 +156,14 @@ const char * linphone_account_creator_get_route(const LinphoneAccountCreator *cr return creator->route; } +void linphone_account_creator_set_display_name(LinphoneAccountCreator *creator, const char *display_name) { + set_string(&creator->display_name, display_name); +} + +const char * linphone_account_creator_get_display_name(const LinphoneAccountCreator *creator) { + return creator->display_name; +} + void linphone_account_creator_set_email(LinphoneAccountCreator *creator, const char *email) { set_string(&creator->email, email); } @@ -269,12 +278,15 @@ LinphoneAccountCreatorStatus linphone_account_creator_validate(LinphoneAccountCr } LinphoneProxyConfig * linphone_account_creator_configure(const LinphoneAccountCreator *creator) { - LinphoneAddress *identity; LinphoneAuthInfo *info; LinphoneProxyConfig *cfg = linphone_core_create_proxy_config(creator->core); char *identity_str = ms_strdup_printf("sip:%s@%s", creator->username, creator->domain); + LinphoneAddress *identity = linphone_address_new(identity_str); + if (creator->display_name) { + linphone_address_set_display_name(identity, creator->display_name); + } - linphone_proxy_config_set_identity(cfg, identity_str); + linphone_proxy_config_set_identity(cfg, linphone_address_as_string(identity)); linphone_proxy_config_set_server_addr(cfg, creator->domain); linphone_proxy_config_set_route(cfg, creator->route); linphone_proxy_config_enable_publish(cfg, FALSE); @@ -298,7 +310,6 @@ LinphoneProxyConfig * linphone_account_creator_configure(const LinphoneAccountCr linphone_core_set_firewall_policy(creator->core, LinphonePolicyUseIce); } - identity = linphone_address_new(linphone_proxy_config_get_identity(cfg)); info = linphone_auth_info_new(linphone_address_get_username(identity), NULL, creator->password, NULL, NULL, linphone_address_get_domain(identity)); linphone_core_add_auth_info(creator->core, info); linphone_address_destroy(identity); diff --git a/coreapi/account_creator.h b/coreapi/account_creator.h index 7a1277d2f..f2231984a 100644 --- a/coreapi/account_creator.h +++ b/coreapi/account_creator.h @@ -161,6 +161,20 @@ LINPHONE_PUBLIC void linphone_account_creator_set_route(LinphoneAccountCreator * **/ LINPHONE_PUBLIC const char * linphone_account_creator_get_route(const LinphoneAccountCreator *creator); +/** + * Set the email. + * @param[in] creator LinphoneAccountCreator object + * @param[in] display_name The display name to set +**/ +LINPHONE_PUBLIC void linphone_account_creator_set_display_name(LinphoneAccountCreator *creator, const char *display_name); + +/** + * Get the email. + * @param[in] creator LinphoneAccountCreator object + * @return The display name of the LinphoneAccountCreator +**/ +LINPHONE_PUBLIC const char * linphone_account_creator_get_display_name(const LinphoneAccountCreator *creator); + /** * Set the email. * @param[in] creator LinphoneAccountCreator object diff --git a/coreapi/bellesip_sal/sal_impl.c b/coreapi/bellesip_sal/sal_impl.c index 957a0e4ca..6e3a6cba9 100644 --- a/coreapi/bellesip_sal/sal_impl.c +++ b/coreapi/bellesip_sal/sal_impl.c @@ -490,6 +490,7 @@ Sal * sal_init(){ sal->tls_verify_cn=TRUE; sal->refresher_retry_after=60000; /*default value in ms*/ sal->enable_sip_update=TRUE; + sal->pending_trans_checking=TRUE; return sal; } @@ -1172,3 +1173,12 @@ void sal_default_set_sdp_handling(Sal *sal, SalOpSDPHandling sdp_handling_method if (sdp_handling_method != SalOpSDPNormal ) ms_message("Enabling special SDP handling for all new SalOp in Sal[%p]!", sal); sal->default_sdp_handling = sdp_handling_method; } + +bool_t sal_pending_trans_checking_enabled(const Sal *sal) { + return sal->pending_trans_checking; +} + +int sal_enable_pending_trans_checking(Sal *sal, bool_t value) { + sal->pending_trans_checking = value; + return 0; +} diff --git a/coreapi/bellesip_sal/sal_impl.h b/coreapi/bellesip_sal/sal_impl.h index 4cceba127..eae0c6bb3 100644 --- a/coreapi/bellesip_sal/sal_impl.h +++ b/coreapi/bellesip_sal/sal_impl.h @@ -51,6 +51,7 @@ struct Sal{ bool_t no_initial_route; bool_t enable_sip_update; /*true by default*/ SalOpSDPHandling default_sdp_handling; + bool_t pending_trans_checking; /*testing purpose*/ }; typedef enum SalOpState { diff --git a/coreapi/bellesip_sal/sal_op_call.c b/coreapi/bellesip_sal/sal_op_call.c index acc629f39..f6e7087bb 100644 --- a/coreapi/bellesip_sal/sal_op_call.c +++ b/coreapi/bellesip_sal/sal_op_call.c @@ -889,6 +889,8 @@ int sal_call_decline(SalOp *op, SalReason reason, const char *redirection /*opti int sal_call_update(SalOp *op, const char *subject, bool_t no_user_consent){ belle_sip_request_t *update; belle_sip_dialog_state_t state=belle_sip_dialog_get_state(op->dialog); + belle_sip_dialog_enable_pending_trans_checking(op->dialog,op->base.root->pending_trans_checking); + /*check for dialog state*/ if ( state == BELLE_SIP_DIALOG_CONFIRMED) { if (no_user_consent) @@ -906,6 +908,11 @@ int sal_call_update(SalOp *op, const char *subject, bool_t no_user_consent){ sal_op_fill_invite(op, update); return sal_op_send_request(op,update); } + /*it failed why ?*/ + if (belle_sip_dialog_request_pending(op->dialog)) + sal_error_info_set(&op->error_info,SalReasonRequestPending,491,NULL,NULL); + else + sal_error_info_set(&op->error_info,SalReasonUnknown,500,NULL,NULL); return -1; } diff --git a/coreapi/bellesip_sal/sal_op_impl.c b/coreapi/bellesip_sal/sal_op_impl.c index 7361486e7..d19091c96 100644 --- a/coreapi/bellesip_sal/sal_op_impl.c +++ b/coreapi/bellesip_sal/sal_op_impl.c @@ -286,7 +286,7 @@ void _sal_op_add_custom_headers(SalOp *op, belle_sip_message_t *msg){ } } -static int _sal_op_send_request_with_contact(SalOp* op, belle_sip_request_t* request,bool_t add_contact) { +static int _sal_op_send_request_with_contact(SalOp* op, belle_sip_request_t* request, bool_t add_contact) { belle_sip_client_transaction_t* client_transaction; belle_sip_provider_t* prov=op->base.root->prov; belle_sip_uri_t* outbound_proxy=NULL; @@ -294,10 +294,10 @@ static int _sal_op_send_request_with_contact(SalOp* op, belle_sip_request_t* req int result =-1; belle_sip_uri_t *next_hop_uri=NULL; - if (add_contact) { + if (add_contact && !belle_sip_message_get_header_by_type(BELLE_SIP_MESSAGE(request),belle_sip_header_contact_t)) { contact = sal_op_create_contact(op); belle_sip_message_set_header(BELLE_SIP_MESSAGE(request),BELLE_SIP_HEADER(contact)); - } + } /*keep existing*/ _sal_op_add_custom_headers(op, (belle_sip_message_t*)request); @@ -613,7 +613,10 @@ void set_or_update_dialog(SalOp* op, belle_sip_dialog_t* dialog) { unlink_op_with_dialog(op,op->dialog); op->dialog=NULL; } - if (dialog) op->dialog=link_op_with_dialog(op,dialog); + if (dialog) { + op->dialog=link_op_with_dialog(op,dialog); + belle_sip_dialog_enable_pending_trans_checking(dialog,op->base.root->pending_trans_checking); + } } sal_op_unref(op); } diff --git a/coreapi/bellesip_sal/sal_op_info.c b/coreapi/bellesip_sal/sal_op_info.c index 9abc73818..3cffb8e55 100644 --- a/coreapi/bellesip_sal/sal_op_info.c +++ b/coreapi/bellesip_sal/sal_op_info.c @@ -21,7 +21,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. int sal_send_info(SalOp *op, const char *from, const char *to, const SalBody *body){ if (op->dialog){ - belle_sip_request_t *req=belle_sip_dialog_create_queued_request(op->dialog,"INFO"); + belle_sip_request_t *req; + belle_sip_dialog_enable_pending_trans_checking(op->dialog,op->base.root->pending_trans_checking); + req=belle_sip_dialog_create_queued_request(op->dialog,"INFO"); sal_op_add_body(op,(belle_sip_message_t*)req,body); return sal_op_send_request(op,req); } diff --git a/coreapi/bellesip_sal/sal_op_registration.c b/coreapi/bellesip_sal/sal_op_registration.c index d56587db2..961ba4a34 100644 --- a/coreapi/bellesip_sal/sal_op_registration.c +++ b/coreapi/bellesip_sal/sal_op_registration.c @@ -40,6 +40,7 @@ static void register_refresher_listener (belle_sip_refresher_t* refresher /*check service route rfc3608*/ belle_sip_header_service_route_t* service_route; belle_sip_header_address_t* service_route_address=NULL; + belle_sip_header_contact_t *contact = belle_sip_refresher_get_contact(refresher); if ((service_route=belle_sip_message_get_header_by_type(response,belle_sip_header_service_route_t))) { service_route_address=belle_sip_header_address_create(NULL,belle_sip_header_address_get_uri(BELLE_SIP_HEADER_ADDRESS(service_route))); } @@ -47,6 +48,9 @@ static void register_refresher_listener (belle_sip_refresher_t* refresher if (service_route_address) belle_sip_object_unref(service_route_address); sal_remove_pending_auth(op->base.root,op); /*just in case*/ + if (contact) { + sal_op_set_contact_address(op,(SalAddress*)(BELLE_SIP_HEADER_ADDRESS(contact))); /*update contact with real value*/ + } op->base.root->callbacks.register_success(op,belle_sip_refresher_get_expires(op->refresher)>0); } else if (status_code>=400) { /* from rfc3608, 6.1. @@ -71,7 +75,7 @@ static void register_refresher_listener (belle_sip_refresher_t* refresher } } -int sal_register(SalOp *op, const char *proxy, const char *from, int expires){ +int sal_register(SalOp *op, const char *proxy, const char *from, int expires,SalAddress* old_contact){ belle_sip_request_t *req; belle_sip_uri_t* req_uri; belle_sip_header_t* accept_header; @@ -96,6 +100,19 @@ int sal_register(SalOp *op, const char *proxy, const char *from, int expires){ accept_header = belle_sip_header_create("Accept", "application/sdp, text/plain, application/vnd.gsma.rcs-ft-http+xml"); belle_sip_message_add_header(BELLE_SIP_MESSAGE(req), accept_header); belle_sip_message_set_header(BELLE_SIP_MESSAGE(req),(belle_sip_header_t*)sal_op_create_contact(op)); + if (old_contact) { + belle_sip_header_contact_t *contact=belle_sip_header_contact_create((const belle_sip_header_address_t *)old_contact); + if (contact) { + char * tmp; + belle_sip_header_contact_set_expires(contact,0); /*remove old aor*/ + belle_sip_message_add_header(BELLE_SIP_MESSAGE(req), BELLE_SIP_HEADER(contact)); + tmp = belle_sip_object_to_string(contact); + ms_message("Clearing contact [%s] for op [%p]",tmp,op); + ms_free(tmp); + } else { + ms_error("Cannot add old contact header to op [%p]",op); + } + } return sal_op_send_and_create_refresher(op,req,expires,register_refresher_listener); } diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index fddd8886a..618a14e59 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -1267,7 +1267,7 @@ static void text_delivery_update(SalOp *op, SalTextDeliveryStatus status){ linphone_chat_message_update_state(chat_msg); if (chat_msg && (chat_msg->cb || (chat_msg->callbacks && linphone_chat_message_cbs_get_msg_state_changed(chat_msg->callbacks)))) { - ms_message("Notifying text delivery with status %i",chat_msg->state); + ms_message("Notifying text delivery with status %s",linphone_chat_message_state_to_string(chat_msg->state)); if (chat_msg->callbacks && linphone_chat_message_cbs_get_msg_state_changed(chat_msg->callbacks)) { linphone_chat_message_cbs_get_msg_state_changed(chat_msg->callbacks)(chat_msg, chat_msg->state); } else { diff --git a/coreapi/chat.c b/coreapi/chat.c index abbbbf745..362079682 100644 --- a/coreapi/chat.c +++ b/coreapi/chat.c @@ -400,6 +400,7 @@ static LinphoneChatRoom * _linphone_core_create_chat_room(LinphoneCore *lc, Linp cr->lc = lc; cr->peer = linphone_address_as_string(addr); cr->peer_url = addr; + cr->unread_count = -1; lc->chatrooms = ms_list_append(lc->chatrooms, (void *)cr); return cr; } @@ -620,6 +621,8 @@ static void _linphone_chat_room_send_message(LinphoneChatRoom *cr, LinphoneChatM msg->from=linphone_address_new(identity); msg->storage_id=linphone_chat_message_store(msg); + if(cr->unread_count >= 0 && !msg->is_read) cr->unread_count++; + // add to transient list cr->transient_messages = ms_list_append(cr->transient_messages, linphone_chat_message_ref(msg)); @@ -772,6 +775,10 @@ void linphone_core_message_received(LinphoneCore *lc, SalOp *op, const SalMessag linphone_address_destroy(addr); msg->storage_id=linphone_chat_message_store(msg); + + if(cr->unread_count < 0) cr->unread_count = 1; + else cr->unread_count++; + linphone_chat_room_message_received(cr,lc,msg); linphone_chat_message_unref(msg); } @@ -1373,6 +1380,7 @@ LinphoneChatMessage* linphone_chat_message_clone(const LinphoneChatMessage* msg) new_message->storage_id=msg->storage_id; if (msg->from) new_message->from=linphone_address_clone(msg->from); if (msg->file_transfer_filepath) new_message->file_transfer_filepath=ms_strdup(msg->file_transfer_filepath); + if (msg->file_transfer_information) new_message->file_transfer_information=linphone_content_copy(msg->file_transfer_information); return new_message; } diff --git a/coreapi/conference.c b/coreapi/conference.c index 75f451736..5479c8315 100644 --- a/coreapi/conference.c +++ b/coreapi/conference.c @@ -22,7 +22,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - + #include "private.h" #include "lpconfig.h" @@ -87,7 +87,7 @@ void linphone_core_conference_check_uninit(LinphoneCore *lc){ ctx->record_endpoint=NULL; } } - + if (ms_audio_conference_get_size(ctx->conf)==0){ ms_audio_conference_destroy(ctx->conf); ctx->conf=NULL; @@ -110,7 +110,7 @@ void linphone_call_add_to_conf(LinphoneCall *call, bool_t muted){ void linphone_call_remove_from_conf(LinphoneCall *call){ LinphoneCore *lc=call->core; LinphoneConference *conf=&lc->conf_ctx; - + ms_audio_conference_remove_member(conf->conf,call->endpoint); ms_audio_endpoint_release_from_stream(call->endpoint); call->endpoint=NULL; @@ -128,12 +128,12 @@ static void add_local_endpoint(LinphoneConference *conf,LinphoneCore *lc){ /*create a dummy audiostream in order to extract the local part of it */ /* network address and ports have no meaning and are not used here. */ AudioStream *st=audio_stream_new(65000,65001,FALSE); - MSSndCard *playcard=lc->sound_conf.lsd_card ? + MSSndCard *playcard=lc->sound_conf.lsd_card ? lc->sound_conf.lsd_card : lc->sound_conf.play_sndcard; MSSndCard *captcard=lc->sound_conf.capt_sndcard; const MSAudioConferenceParams *params=ms_audio_conference_get_params(conf->conf); conf->local_dummy_profile=make_dummy_profile(params->samplerate); - + audio_stream_start_full(st, conf->local_dummy_profile, "127.0.0.1", 65000, @@ -151,7 +151,7 @@ static void add_local_endpoint(LinphoneConference *conf,LinphoneCore *lc){ conf->local_participant=st; conf->local_endpoint=ms_audio_endpoint_get_from_stream(st,FALSE); ms_audio_conference_add_member(conf->conf,conf->local_endpoint); - + } /** @@ -166,7 +166,7 @@ float linphone_core_get_conference_local_input_volume(LinphoneCore *lc){ float vol=0; ms_filter_call_method(st->volsend,MS_VOLUME_GET,&vol); return vol; - + } return LINPHONE_VOLUME_DB_LOWEST; } @@ -175,22 +175,22 @@ float linphone_core_get_conference_local_input_volume(LinphoneCore *lc){ * Merge a call into a conference. * @param lc the linphone core * @param call an established call, either in LinphoneCallStreamsRunning or LinphoneCallPaused state. - * + * * If this is the first call that enters the conference, the virtual conference will be created automatically. * If the local user was actively part of the call (ie not in paused state), then the local user is automatically entered into the conference. * If the call was in paused state, then it is automatically resumed when entering into the conference. - * + * * @return 0 if successful, -1 otherwise. **/ int linphone_core_add_to_conference(LinphoneCore *lc, LinphoneCall *call){ LinphoneConference *conf=&lc->conf_ctx; - + if (call->current_params->in_conference){ ms_error("Already in conference"); return -1; } conference_check_init(&lc->conf_ctx, lp_config_get_int(lc->config, "sound","conference_rate",16000)); - + if (call->state==LinphoneCallPaused){ call->params->in_conference=TRUE; call->params->has_video=FALSE; @@ -199,7 +199,7 @@ int linphone_core_add_to_conference(LinphoneCore *lc, LinphoneCall *call){ LinphoneCallParams *params=linphone_call_params_copy(linphone_call_get_current_params(call)); params->in_conference=TRUE; params->has_video=FALSE; - + if (call->audiostream || call->videostream){ linphone_call_stop_media_streams(call); /*free the audio & video local resources*/ linphone_call_init_media_streams(call); @@ -280,15 +280,15 @@ static int convert_conference_to_call(LinphoneCore *lc){ * Remove a call from the conference. * @param lc the linphone core * @param call a call that has been previously merged into the conference. - * + * * After removing the remote participant belonging to the supplied call, the call becomes a normal call in paused state. * If one single remote participant is left alone together with the local user in the conference after the removal, then the conference is * automatically transformed into a simple call in StreamsRunning state. * The conference's resources are then automatically destroyed. - * + * * In other words, unless linphone_core_leave_conference() is explicitely called, the last remote participant of a conference is automatically * put in a simple call in running state. - * + * * @return 0 if successful, -1 otherwise. **/ int linphone_core_remove_from_conference(LinphoneCore *lc, LinphoneCall *call){ @@ -311,11 +311,6 @@ int linphone_core_remove_from_conference(LinphoneCore *lc, LinphoneCall *call){ return err; } -/** - * Indicates whether the local participant is part of the conference. - * @param lc the linphone core - * @return TRUE if the local participant is in the conference, FALSE otherwise. -**/ bool_t linphone_core_is_in_conference(const LinphoneCore *lc){ return lc->conf_ctx.local_participant!=NULL; } @@ -336,12 +331,12 @@ int linphone_core_leave_conference(LinphoneCore *lc){ /** * Moves the local participant inside the conference. * @param lc the linphone core - * - * Makes the local participant to join the conference. + * + * Makes the local participant to join the conference. * Typically, the local participant is by default always part of the conference when joining an active call into a conference. * However, by calling linphone_core_leave_conference() and linphone_core_enter_conference() the application can decide to temporarily * move out and in the local participant from the conference. - * + * * @return 0 if successful, -1 otherwise **/ int linphone_core_enter_conference(LinphoneCore *lc){ @@ -360,9 +355,9 @@ int linphone_core_enter_conference(LinphoneCore *lc){ /** * Add all calls into a conference. * @param lc the linphone core - * + * * Merge all established calls (either in LinphoneCallStreamsRunning or LinphoneCallPaused) into a conference. - * + * * @return 0 if successful, -1 otherwise **/ int linphone_core_add_all_to_conference(LinphoneCore *lc) { @@ -381,9 +376,9 @@ int linphone_core_add_all_to_conference(LinphoneCore *lc) { /** * Terminates the conference and the calls associated with it. * @param lc the linphone core - * + * * All the calls that were merged to the conference are terminated, and the conference resources are destroyed. - * + * * @return 0 if successful, -1 otherwise **/ int linphone_core_terminate_conference(LinphoneCore *lc) { @@ -404,10 +399,10 @@ int linphone_core_terminate_conference(LinphoneCore *lc) { /** * Returns the number of participants to the conference, including the local participant. * @param lc the linphone core - * + * * Typically, after merging two calls into the conference, there is total of 3 participants: * the local participant (or local user), and two remote participants that were the destinations of the two previously establised calls. - * + * * @return the number of participants to the conference **/ int linphone_core_get_conference_size(LinphoneCore *lc) { diff --git a/coreapi/linphone_proxy_config.h b/coreapi/linphone_proxy_config.h new file mode 100644 index 000000000..7c1912ed3 --- /dev/null +++ b/coreapi/linphone_proxy_config.h @@ -0,0 +1,504 @@ +/* +Copyright (C) 2000 - 2010 Simon MORLAT (simon.morlat@linphone.org) + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ +#ifndef LINPHONE_PROXY_CONFIG_H +#define LINPHONE_PROXY_CONFIG_H + +/** + * Creates an empty proxy config. + * @deprecated, use #linphone_core_create_proxy_config instead +**/ +LINPHONE_PUBLIC LinphoneProxyConfig *linphone_proxy_config_new(void); + +/** + * Acquire a reference to the proxy config. + * @param[in] cfg #LinphoneProxyConfig object. + * @return The same proxy config. +**/ +LINPHONE_PUBLIC LinphoneProxyConfig *linphone_proxy_config_ref(LinphoneProxyConfig *cfg); + +/** + * Release reference to the proxy config. + * @param[in] cfg #LinphoneProxyConfig object. +**/ +LINPHONE_PUBLIC void linphone_proxy_config_unref(LinphoneProxyConfig *cfg); + +/** + * Retrieve the user pointer associated with the proxy config. + * @param[in] cfg #LinphoneProxyConfig object. + * @return The user pointer associated with the proxy config. +**/ +LINPHONE_PUBLIC void *linphone_proxy_config_get_user_data(const LinphoneProxyConfig *cfg); + +/** + * Assign a user pointer to the proxy config. + * @param[in] cfg #LinphoneProxyConfig object. + * @param[in] ud The user pointer to associate with the proxy config. +**/ +LINPHONE_PUBLIC void linphone_proxy_config_set_user_data(LinphoneProxyConfig *cfg, void *ud); + +/** + * Sets the proxy address + * + * Examples of valid sip proxy address are: + * - IP address: sip:87.98.157.38 + * - IP address with port: sip:87.98.157.38:5062 + * - hostnames : sip:sip.example.net +**/ +LINPHONE_PUBLIC int linphone_proxy_config_set_server_addr(LinphoneProxyConfig *cfg, const char *server_addr); + +/** + * @deprecated Use linphone_proxy_config_set_identity_address() +**/ +LINPHONE_PUBLIC int linphone_proxy_config_set_identity(LinphoneProxyConfig *cfg, const char *identity); + +/** + * Sets the user identity as a SIP address. + * + * This identity is normally formed with display name, username and domain, such + * as: + * Alice + * The REGISTER messages will have from and to set to this identity. + * +**/ +LINPHONE_PUBLIC int linphone_proxy_config_set_identity_address(LinphoneProxyConfig *cfg, const LinphoneAddress *identity); + +/** + * Sets a SIP route. + * When a route is set, all outgoing calls will go to the route's destination if this proxy + * is the default one (see linphone_core_set_default_proxy() ). +**/ +LINPHONE_PUBLIC int linphone_proxy_config_set_route(LinphoneProxyConfig *cfg, const char *route); + +/** + * Sets the registration expiration time in seconds. +**/ +LINPHONE_PUBLIC void linphone_proxy_config_set_expires(LinphoneProxyConfig *cfg, int expires); + +#define linphone_proxy_config_expires linphone_proxy_config_set_expires +/** + * Indicates either or not, REGISTRATION must be issued for this #LinphoneProxyConfig . + *
In case this #LinphoneProxyConfig has been added to #LinphoneCore, follows the linphone_proxy_config_edit() rule. + * @param[in] cfg #LinphoneProxyConfig object. + * @param val if true, registration will be engaged + */ +LINPHONE_PUBLIC void linphone_proxy_config_enable_register(LinphoneProxyConfig *cfg, bool_t val); + +#define linphone_proxy_config_enableregister linphone_proxy_config_enable_register + +/** + * Starts editing a proxy configuration. + * + * Because proxy configuration must be consistent, applications MUST + * call linphone_proxy_config_edit() before doing any attempts to modify + * proxy configuration (such as identity, proxy address and so on). + * Once the modifications are done, then the application must call + * linphone_proxy_config_done() to commit the changes. +**/ +LINPHONE_PUBLIC void linphone_proxy_config_edit(LinphoneProxyConfig *cfg); + +/** + * Commits modification made to the proxy configuration. +**/ +LINPHONE_PUBLIC int linphone_proxy_config_done(LinphoneProxyConfig *cfg); +/** + * Indicates either or not, PUBLISH must be issued for this #LinphoneProxyConfig . + *
In case this #LinphoneProxyConfig has been added to #LinphoneCore, follows the linphone_proxy_config_edit() rule. + * @param[in] cfg #LinphoneProxyConfig object. + * @param val if true, publish will be engaged + * + */ +LINPHONE_PUBLIC void linphone_proxy_config_enable_publish(LinphoneProxyConfig *cfg, bool_t val); +/** + * Set the publish expiration time in second. + * @param[in] cfg #LinphoneProxyConfig object. + * @param expires in second + * */ + +LINPHONE_PUBLIC void linphone_proxy_config_set_publish_expires(LinphoneProxyConfig *cfg, int expires); +/** + * get the publish expiration time in second. Default value is the registration expiration value. + * @param[in] cfg #LinphoneProxyConfig object. + * @return expires in second + * */ + +LINPHONE_PUBLIC int linphone_proxy_config_get_publish_expires(const LinphoneProxyConfig *cfg); + +/** + * Sets whether liblinphone should replace "+" by international calling prefix in dialed numbers (passed to + * #linphone_core_invite ). + * +**/ +LINPHONE_PUBLIC void linphone_proxy_config_set_dial_escape_plus(LinphoneProxyConfig *cfg, bool_t val); + +/** + * Sets a dialing prefix to be automatically prepended when inviting a number with + * linphone_core_invite(); + * This dialing prefix shall usually be the country code of the country where the user is living, without "+". + * +**/ +LINPHONE_PUBLIC void linphone_proxy_config_set_dial_prefix(LinphoneProxyConfig *cfg, const char *prefix); + + /** + * Indicates whether quality statistics during call should be stored and sent to a collector according to RFC 6035. + * @param[in] cfg #LinphoneProxyConfig object. + * @param[in] enable True to sotre quality statistics and sent them to the collector, false to disable it. + */ +LINPHONE_PUBLIC void linphone_proxy_config_enable_quality_reporting(LinphoneProxyConfig *cfg, bool_t enable); + +/** + * Indicates whether quality statistics during call should be stored and sent to a collector according to RFC 6035. + * @param[in] cfg #LinphoneProxyConfig object. + * @return True if quality repotring is enabled, false otherwise. + */ +LINPHONE_PUBLIC bool_t linphone_proxy_config_quality_reporting_enabled(LinphoneProxyConfig *cfg); + + /** + * Set the route of the collector end-point when using quality reporting. This SIP address + * should be used on server-side to process packets directly before discarding packets. Collector address + * should be a non existing account and will not receive any messages. + * If NULL, reports will be send to the proxy domain. + * @param[in] cfg #LinphoneProxyConfig object. + * @param[in] collector route of the collector end-point, if NULL PUBLISH will be sent to the proxy domain. + */ +LINPHONE_PUBLIC void linphone_proxy_config_set_quality_reporting_collector(LinphoneProxyConfig *cfg, const char *collector); + + /** + * Get the route of the collector end-point when using quality reporting. This SIP address + * should be used on server-side to process packets directly before discarding packets. Collector address + * should be a non existing account and will not receive any messages. + * If NULL, reports will be send to the proxy domain. + * @param[in] cfg #LinphoneProxyConfig object. + * @return The SIP address of the collector end-point. + */ +LINPHONE_PUBLIC const char *linphone_proxy_config_get_quality_reporting_collector(const LinphoneProxyConfig *cfg); + +/** + * Set the interval between 2 interval reports sending when using quality reporting. If call exceed interval size, an + * interval report will be sent to the collector. On call termination, a session report will be sent + * for the remaining period. Value must be 0 (disabled) or positive. + * @param[in] cfg #LinphoneProxyConfig object. + * @param[in] interval The interval in seconds, 0 means interval reports are disabled. + */ +LINPHONE_PUBLIC void linphone_proxy_config_set_quality_reporting_interval(LinphoneProxyConfig *cfg, uint8_t interval); + +/** + * Get the interval between interval reports when using quality reporting. + * @param[in] cfg #LinphoneProxyConfig object. + * @return The interval in seconds, 0 means interval reports are disabled. + */ + +LINPHONE_PUBLIC int linphone_proxy_config_get_quality_reporting_interval(LinphoneProxyConfig *cfg); + +/** + * Get the registration state of the given proxy config. + * @param[in] cfg #LinphoneProxyConfig object. + * @return The registration state of the proxy config. +**/ +LINPHONE_PUBLIC LinphoneRegistrationState linphone_proxy_config_get_state(const LinphoneProxyConfig *cfg); + +/** + * @return a boolean indicating that the user is sucessfully registered on the proxy. + * @deprecated Use linphone_proxy_config_get_state() instead. +**/ +LINPHONE_PUBLIC bool_t linphone_proxy_config_is_registered(const LinphoneProxyConfig *cfg); + +/** + * Get the domain name of the given proxy config. + * @param[in] cfg #LinphoneProxyConfig object. + * @return The domain name of the proxy config. +**/ +LINPHONE_PUBLIC const char *linphone_proxy_config_get_domain(const LinphoneProxyConfig *cfg); + +/** + * Get the realm of the given proxy config. + * @param[in] cfg #LinphoneProxyConfig object. + * @return The realm of the proxy config. +**/ +LINPHONE_PUBLIC const char *linphone_proxy_config_get_realm(const LinphoneProxyConfig *cfg); +/** + * Set the realm of the given proxy config. + * @param[in] cfg #LinphoneProxyConfig object. + * @param[in] realm New realm value. + * @return The realm of the proxy config. +**/ +LINPHONE_PUBLIC void linphone_proxy_config_set_realm(LinphoneProxyConfig *cfg, const char * realm); + +/** + * @return the route set for this proxy configuration. +**/ +LINPHONE_PUBLIC const char *linphone_proxy_config_get_route(const LinphoneProxyConfig *cfg); + +/** + * @return the SIP identity that belongs to this proxy configuration. +**/ +LINPHONE_PUBLIC const LinphoneAddress *linphone_proxy_config_get_identity_address(const LinphoneProxyConfig *cfg); + +/** + * @deprecated use linphone_proxy_config_get_identity_address() +**/ +LINPHONE_PUBLIC const char *linphone_proxy_config_get_identity(const LinphoneProxyConfig *cfg); + +/** + * @return TRUE if PUBLISH request is enabled for this proxy. +**/ +LINPHONE_PUBLIC bool_t linphone_proxy_config_publish_enabled(const LinphoneProxyConfig *cfg); + +/** + * @return the proxy's SIP address. +**/ +LINPHONE_PUBLIC const char *linphone_proxy_config_get_server_addr(const LinphoneProxyConfig *cfg); +#define linphone_proxy_config_get_addr linphone_proxy_config_get_server_addr +/** + * @return the duration of registration. +**/ +LINPHONE_PUBLIC int linphone_proxy_config_get_expires(const LinphoneProxyConfig *cfg); +/** + * @return TRUE if registration to the proxy is enabled. +**/ +LINPHONE_PUBLIC bool_t linphone_proxy_config_register_enabled(const LinphoneProxyConfig *cfg); +/** + * Refresh a proxy registration. + * This is useful if for example you resuming from suspend, thus IP address may have changed. +**/ +LINPHONE_PUBLIC void linphone_proxy_config_refresh_register(LinphoneProxyConfig *cfg); +/** + * Prevent a proxy config from refreshing its registration. + * This is useful to let registrations to expire naturally (or) when the application wants to keep control on when + * refreshes are sent. + * However, linphone_core_set_network_reachable(lc,TRUE) will always request the proxy configs to refresh their registrations. + * The refreshing operations can be resumed with linphone_proxy_config_refresh_register(). + * @param[in] cfg #LinphoneProxyConfig object. +**/ +LINPHONE_PUBLIC void linphone_proxy_config_pause_register(LinphoneProxyConfig *cfg); + +LINPHONE_PUBLIC const LinphoneAddress* linphone_proxy_config_get_contact(const LinphoneProxyConfig *cfg); + +/** + * @return previously set contact parameters. +**/ +LINPHONE_PUBLIC const char *linphone_proxy_config_get_contact_parameters(const LinphoneProxyConfig *cfg); +/** + * Set optional contact parameters that will be added to the contact information sent in the registration. + * @param[in] cfg #LinphoneProxyConfig object. + * @param contact_params a string contaning the additional parameters in text form, like "myparam=something;myparam2=something_else" + * + * The main use case for this function is provide the proxy additional information regarding the user agent, like for example unique identifier or apple push id. + * As an example, the contact address in the SIP register sent will look like ;apple-push-id=43143-DFE23F-2323-FA2232. +**/ +LINPHONE_PUBLIC void linphone_proxy_config_set_contact_parameters(LinphoneProxyConfig *cfg, const char *contact_params); + +/** + * Set optional contact parameters that will be added to the contact information sent in the registration, inside the URI. + * @param[in] cfg #LinphoneProxyConfig object. + * @param contact_uri_params a string containing the additional parameters in text form, like "myparam=something;myparam2=something_else" + * + * The main use case for this function is provide the proxy additional information regarding the user agent, like for example unique identifier or apple push id. + * As an example, the contact address in the SIP register sent will look like . +**/ +LINPHONE_PUBLIC void linphone_proxy_config_set_contact_uri_parameters(LinphoneProxyConfig *cfg, const char *contact_uri_params); + +/** + * @return previously set contact URI parameters. +**/ +LINPHONE_PUBLIC const char* linphone_proxy_config_get_contact_uri_parameters(const LinphoneProxyConfig *cfg); + +/** + * Get the #LinphoneCore object to which is associated the #LinphoneProxyConfig. + * @param[in] cfg #LinphoneProxyConfig object. + * @return The #LinphoneCore object to which is associated the #LinphoneProxyConfig. +**/ +LINPHONE_PUBLIC LinphoneCore * linphone_proxy_config_get_core(const LinphoneProxyConfig *cfg); + +/** + * @return whether liblinphone should replace "+" by "00" in dialed numbers (passed to + * #linphone_core_invite ). + * +**/ +LINPHONE_PUBLIC bool_t linphone_proxy_config_get_dial_escape_plus(const LinphoneProxyConfig *cfg); + +/** + * @return dialing prefix. +**/ +LINPHONE_PUBLIC const char * linphone_proxy_config_get_dial_prefix(const LinphoneProxyConfig *cfg); + +/** + * Get the reason why registration failed when the proxy config state is LinphoneRegistrationFailed. + * @param[in] cfg #LinphoneProxyConfig object. + * @return The reason why registration failed for this proxy config. +**/ +LINPHONE_PUBLIC LinphoneReason linphone_proxy_config_get_error(const LinphoneProxyConfig *cfg); + +/** + * Get detailed information why registration failed when the proxy config state is LinphoneRegistrationFailed. + * @param[in] cfg #LinphoneProxyConfig object. + * @return The details why registration failed for this proxy config. +**/ +LINPHONE_PUBLIC const LinphoneErrorInfo *linphone_proxy_config_get_error_info(const LinphoneProxyConfig *cfg); + +/** + * Get the transport from either service route, route or addr. + * @param[in] cfg #LinphoneProxyConfig object. + * @return The transport as a string (I.E udp, tcp, tls, dtls) +**/ +LINPHONE_PUBLIC const char* linphone_proxy_config_get_transport(const LinphoneProxyConfig *cfg); + + +/** + * Destroys a proxy config. + * @deprecated + * + * @note: LinphoneProxyConfig that have been removed from LinphoneCore with + * linphone_core_remove_proxy_config() must not be freed. +**/ +LINPHONE_PUBLIC void linphone_proxy_config_destroy(LinphoneProxyConfig *cfg); + +LINPHONE_PUBLIC void linphone_proxy_config_set_sip_setup(LinphoneProxyConfig *cfg, const char *type); +LINPHONE_PUBLIC SipSetupContext *linphone_proxy_config_get_sip_setup_context(LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC SipSetup *linphone_proxy_config_get_sip_setup(LinphoneProxyConfig *cfg); + +/** + * Detect if the given input is a phone number or not. + * @param proxy #LinphoneProxyConfig argument, unused yet but may contain useful data. Can be NULL. + * @param username string to parse. + * @return TRUE if input is a phone number, FALSE otherwise. +**/ +LINPHONE_PUBLIC bool_t linphone_proxy_config_is_phone_number(LinphoneProxyConfig *proxy, const char *username); + +/** + * Normalize a human readable phone number into a basic string. 888-444-222 becomes 888444222 + * or +33888444222 depending on the #LinphoneProxyConfig object. However this argument is OPTIONNAL + * and if not provided, a default one will be used. + * This function will always generate a normalized username; if input is not a phone number, output will be a copy of input. + * @param proxy #LinphoneProxyConfig object containing country code and/or escape symbol. If NULL passed, will use default configuration. + * @param username the string to parse + * @param result the newly normalized number + * @param result_len the size of the normalized number \a result + * @return TRUE if a phone number was recognized, FALSE otherwise. + */ +LINPHONE_PUBLIC bool_t linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const char *username, + char *result, size_t result_len); + +/** + * Same objective as linphone_proxy_config_normalize_number but allocates a new string + * @param proxy #LinphoneProxyConfig object containing country code and/or escape symbol. If NULL passed, will use default configuration. + * @param username the string to parse + * @return NULL if invalid phone number, normalized phone number from username input otherwise. +*/ +LINPHONE_PUBLIC char* linphone_proxy_config_normalize_phone_number(LinphoneProxyConfig *proxy, const char *username); + +/** + * Normalize a human readable sip uri into a fully qualified LinphoneAddress. + * A sip address should look like DisplayName \ . + * Basically this function performs the following tasks + * - if a phone number is entered, prepend country prefix and eventually escape the '+' by 00 of the proxy config. + * - if no domain part is supplied, append the domain name of the proxy config. Returns NULL if no proxy is provided at this point. + * - if no sip: is present, prepend it. + * + * The result is a syntactically correct SIP address. + * @param proxy #LinphoneProxyConfig object containing country code, escape symbol and/or domain name. Can be NULL if domain is already provided. + * @param username the string to parse + * @return NULL if invalid input, normalized sip address otherwise. +*/ +LINPHONE_PUBLIC LinphoneAddress* linphone_proxy_config_normalize_sip_uri(LinphoneProxyConfig *proxy, const char *username); + +/** + * Set default privacy policy for all calls routed through this proxy. + * @param[in] cfg #LinphoneProxyConfig object. + * @param privacy LinphonePrivacy to configure privacy + * */ +LINPHONE_PUBLIC void linphone_proxy_config_set_privacy(LinphoneProxyConfig *cfg, LinphonePrivacyMask privacy); +/** + * Get default privacy policy for all calls routed through this proxy. + * @param[in] cfg #LinphoneProxyConfig object. + * @return Privacy mode + * */ +LINPHONE_PUBLIC LinphonePrivacyMask linphone_proxy_config_get_privacy(const LinphoneProxyConfig *cfg); +/** + * Set the http file transfer server to be used for content type application/vnd.gsma.rcs-ft-http+xml + * @param[in] cfg #LinphoneProxyConfig object. + * @param server_url URL of the file server like https://file.linphone.org/upload.php + * */ +LINPHONE_PUBLIC void linphone_proxy_config_set_file_transfer_server(LinphoneProxyConfig *cfg, const char * server_url); +/** + * Get the http file transfer server to be used for content type application/vnd.gsma.rcs-ft-http+xml + * @param[in] cfg #LinphoneProxyConfig object. + * @return URL of the file server like https://file.linphone.org/upload.php + * */ +LINPHONE_PUBLIC const char* linphone_proxy_config_get_file_transfer_server(const LinphoneProxyConfig *cfg); + +/** + * Indicates whether AVPF/SAVPF must be used for calls using this proxy config. + * @param[in] cfg #LinphoneProxyConfig object. + * @param[in] enable True to enable AVPF/SAVF, false to disable it. + * @deprecated use linphone_proxy_config_set_avpf_mode() + */ +LINPHONE_PUBLIC void linphone_proxy_config_enable_avpf(LinphoneProxyConfig *cfg, bool_t enable); + +/** + * Indicates whether AVPF/SAVPF is being used for calls using this proxy config. + * @param[in] cfg #LinphoneProxyConfig object. + * @return True if AVPF/SAVPF is enabled, false otherwise. + * @deprecated use linphone_proxy_config_set_avpf_mode() + */ +LINPHONE_PUBLIC bool_t linphone_proxy_config_avpf_enabled(LinphoneProxyConfig *cfg); + +/** + * Set the interval between regular RTCP reports when using AVPF/SAVPF. + * @param[in] cfg #LinphoneProxyConfig object. + * @param[in] interval The interval in seconds (between 0 and 5 seconds). + */ +LINPHONE_PUBLIC void linphone_proxy_config_set_avpf_rr_interval(LinphoneProxyConfig *cfg, uint8_t interval); + +/** + * Get the interval between regular RTCP reports when using AVPF/SAVPF. + * @param[in] cfg #LinphoneProxyConfig object. + * @return The interval in seconds. + */ +LINPHONE_PUBLIC uint8_t linphone_proxy_config_get_avpf_rr_interval(const LinphoneProxyConfig *cfg); + +/** + * Get enablement status of RTCP feedback (also known as AVPF profile). + * @param[in] cfg #LinphoneProxyConfig object. + * @return the enablement mode, which can be LinphoneAVPFDefault (use LinphoneCore's mode), LinphoneAVPFEnabled (avpf is enabled), or LinphoneAVPFDisabled (disabled). +**/ +LINPHONE_PUBLIC LinphoneAVPFMode linphone_proxy_config_get_avpf_mode(const LinphoneProxyConfig *cfg); + +/** + * Enable the use of RTCP feedback (also known as AVPF profile). + * @param[in] cfg #LinphoneProxyConfig object. + * @param[in] mode the enablement mode, which can be LinphoneAVPFDefault (use LinphoneCore's mode), LinphoneAVPFEnabled (avpf is enabled), or LinphoneAVPFDisabled (disabled). +**/ +LINPHONE_PUBLIC void linphone_proxy_config_set_avpf_mode(LinphoneProxyConfig *cfg, LinphoneAVPFMode mode); + +/** + * Obtain the value of a header sent by the server in last answer to REGISTER. + * @param[in] cfg #LinphoneProxyConfig object. + * @param header_name the header name for which to fetch corresponding value + * @return the value of the queried header. +**/ +LINPHONE_PUBLIC const char *linphone_proxy_config_get_custom_header(LinphoneProxyConfig *cfg, const char *header_name); + +/** + * Set the value of a custom header sent to the server in REGISTERs request. + * @param[in] cfg #LinphoneProxyConfig object. + * @param header_name the header name + * @param header_value the header's value +**/ +LINPHONE_PUBLIC void linphone_proxy_config_set_custom_header(LinphoneProxyConfig *cfg, const char *header_name, const char *header_value); + +#endif diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index 791b345aa..f92680316 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -584,7 +584,6 @@ void linphone_call_make_local_media_description_with_params(LinphoneCore *lc, Li SalMediaDescription *old_md=call->localdesc; int i; int nb_active_streams = 0; - const char *me; SalMediaDescription *md=sal_media_description_new(); LinphoneAddress *addr; const char *subject; @@ -605,11 +604,11 @@ void linphone_call_make_local_media_description_with_params(LinphoneCore *lc, Li linphone_core_adapt_to_network(lc,call->ping_time,params); - if (call->dest_proxy) - me=linphone_proxy_config_get_identity(call->dest_proxy); - else - me=linphone_core_get_identity(lc); - addr=linphone_address_new(me); + if (call->dest_proxy) { + addr=linphone_address_clone(linphone_proxy_config_get_identity_address(call->dest_proxy)); + } else { + addr=linphone_address_new(linphone_core_get_identity(lc)); + } md->session_id=(old_md ? old_md->session_id : (rand() & 0xfff)); md->session_ver=(old_md ? (old_md->session_ver+1) : (rand() & 0xfff)); @@ -2506,6 +2505,7 @@ static RtpSession * create_audio_rtp_io_session(LinphoneCall *call) { int remote_port = lp_config_get_int(lc->config, "sound", "rtp_remote_port", 17078); int ptnum = lp_config_get_int(lc->config, "sound", "rtp_ptnum", 0); const char *rtpmap = lp_config_get_string(lc->config, "sound", "rtp_map", "pcmu/8000/1"); + int symmetric = lp_config_get_int(lc->config, "sound", "rtp_symmetric", 0); RtpSession *rtp_session = NULL; pt = rtp_profile_get_payload_from_rtpmap(call->audio_profile, rtpmap); if (pt != NULL) { @@ -2517,6 +2517,7 @@ static RtpSession * create_audio_rtp_io_session(LinphoneCall *call) { rtp_session_enable_rtcp(rtp_session, FALSE); rtp_session_set_payload_type(rtp_session, ptnum); rtp_session_set_jitter_compensation(rtp_session, linphone_core_get_audio_jittcomp(lc)); + rtp_session_set_symmetric_rtp(rtp_session, (bool_t)symmetric); } return rtp_session; } @@ -2569,6 +2570,8 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, bool_t muted, b playfile=NULL; }else if (stream->dir==SalStreamSendOnly){ playcard=NULL; + /*jehan: why capture card should be null in this case ? Not very good to only rely on stream dir to detect paused state. + * It can also be a simple call in one way audio*/ captcard=NULL; recfile=NULL; /*And we will eventually play "playfile" if set by the user*/ @@ -2631,6 +2634,8 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, bool_t muted, b if (io.rtp_session == NULL) { ok = FALSE; } + } else if (stream->dir==SalStreamSendOnly) { /*no very good, io.xx versus playcard,captcard and call state should be reworked*/ + io.input_file = playfile; /*quick fix to restaure current behavior which is SalStreamSendOnly=Paused=playfile*/ } else { io.playback_card = playcard; io.capture_card = captcard; @@ -2681,6 +2686,7 @@ static RtpSession * create_video_rtp_io_session(LinphoneCall *call) { int remote_port = lp_config_get_int(lc->config, "video", "rtp_remote_port", 19078); int ptnum = lp_config_get_int(lc->config, "video", "rtp_ptnum", 0); const char *rtpmap = lp_config_get_string(lc->config, "video", "rtp_map", "vp8/90000/1"); + int symmetric = lp_config_get_int(lc->config, "video", "rtp_symmetric", 0); RtpSession *rtp_session = NULL; pt = rtp_profile_get_payload_from_rtpmap(call->video_profile, rtpmap); if (pt != NULL) { @@ -2691,6 +2697,7 @@ static RtpSession * create_video_rtp_io_session(LinphoneCall *call) { rtp_session_set_remote_addr_and_port(rtp_session, remote_ip, remote_port, -1); rtp_session_enable_rtcp(rtp_session, FALSE); rtp_session_set_payload_type(rtp_session, ptnum); + rtp_session_set_symmetric_rtp(rtp_session, (bool_t)symmetric); } return rtp_session; } @@ -2740,12 +2747,12 @@ static void linphone_call_start_video_stream(LinphoneCall *call, bool_t all_inpu video_stream_set_fps(call->videostream,linphone_core_get_preferred_framerate(lc)); video_stream_set_sent_video_size(call->videostream,linphone_core_get_preferred_video_size(lc)); video_stream_enable_self_view(call->videostream,lc->video_conf.selfview); - if (call->video_window_id != 0) - video_stream_set_native_window_id(call->videostream,call->video_window_id); - else if (lc->video_window_id!=0) - video_stream_set_native_window_id(call->videostream,lc->video_window_id); - if (lc->preview_window_id!=0) - video_stream_set_native_preview_window_id (call->videostream,lc->preview_window_id); + if (call->video_window_id != NULL) + video_stream_set_native_window_id(call->videostream, call->video_window_id); + else if (lc->video_window_id != NULL) + video_stream_set_native_window_id(call->videostream, lc->video_window_id); + if (lc->preview_window_id != NULL) + video_stream_set_native_preview_window_id(call->videostream, lc->preview_window_id); video_stream_use_preview_video_window (call->videostream,lc->use_preview_window); if (is_multicast){ @@ -3200,6 +3207,32 @@ float linphone_call_get_record_volume(LinphoneCall *call){ return LINPHONE_VOLUME_DB_LOWEST; } +float linphone_call_get_speaker_volume_gain(const LinphoneCall *call) { + if(call->audiostream) return audio_stream_get_sound_card_output_gain(call->audiostream); + else { + ms_error("Could not get playback volume: no audio stream"); + return -1.0f; + } +} + +void linphone_call_set_speaker_volume_gain(LinphoneCall *call, float volume) { + if(call->audiostream) audio_stream_set_sound_card_output_gain(call->audiostream, volume); + else ms_error("Could not set playback volume: no audio stream"); +} + +float linphone_call_get_microphone_volume_gain(const LinphoneCall *call) { + if(call->audiostream) return audio_stream_get_sound_card_input_gain(call->audiostream); + else { + ms_error("Could not get record volume: no audio stream"); + return -1.0f; + } +} + +void linphone_call_set_microphone_volume_gain(LinphoneCall *call, float volume) { + if(call->audiostream) audio_stream_set_sound_card_input_gain(call->audiostream, volume); + else ms_error("Could not set record volume: no audio stream"); +} + /** * Obtain real-time quality rating of the call * @@ -4037,7 +4070,7 @@ void linphone_call_cancel_dtmfs(LinphoneCall *call) { } } -unsigned long linphone_call_get_native_video_window_id(const LinphoneCall *call) { +void * linphone_call_get_native_video_window_id(const LinphoneCall *call) { if (call->video_window_id) { /* The video id was previously set by the app. */ return call->video_window_id; @@ -4051,7 +4084,7 @@ unsigned long linphone_call_get_native_video_window_id(const LinphoneCall *call) return 0; } -void linphone_call_set_native_video_window_id(LinphoneCall *call, unsigned long id) { +void linphone_call_set_native_video_window_id(LinphoneCall *call, void *id) { call->video_window_id = id; #ifdef VIDEO_ENABLED if (call->videostream) { diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 2e70f820f..00ec99070 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -1496,6 +1496,7 @@ void linphone_configuring_terminated(LinphoneCore *lc, LinphoneConfiguringState linphone_core_start(lc); } + static int linphone_core_serialization_ref = 0; static void linphone_core_activate_log_serialization_if_needed(void) { @@ -1929,30 +1930,16 @@ static void apply_jitter_value(LinphoneCore *lc, int value, MSFormatType stype){ } } -/** - * Sets the nominal audio jitter buffer size in milliseconds. - * The value takes effect immediately for all running and pending calls, if any. - * A value of 0 disables the jitter buffer. - * - * @ingroup media_parameters -**/ -void linphone_core_set_audio_jittcomp(LinphoneCore *lc, int value) +void linphone_core_set_audio_jittcomp(LinphoneCore *lc, int milliseconds) { - lc->rtp_conf.audio_jitt_comp=value; - apply_jitter_value(lc, value, MSAudio); + lc->rtp_conf.audio_jitt_comp=milliseconds; + apply_jitter_value(lc, milliseconds, MSAudio); } -/** - * Sets the nominal video jitter buffer size in milliseconds. - * The value takes effect immediately for all running and pending calls, if any. - * A value of 0 disables the jitter buffer. - * - * @ingroup media_parameters -**/ -void linphone_core_set_video_jittcomp(LinphoneCore *lc, int value) +void linphone_core_set_video_jittcomp(LinphoneCore *lc, int milliseconds) { - lc->rtp_conf.video_jitt_comp=value; - apply_jitter_value(lc, value, MSVideo); + lc->rtp_conf.video_jitt_comp=milliseconds; + apply_jitter_value(lc, milliseconds, MSVideo); } void linphone_core_set_rtp_no_xmit_on_audio_mute(LinphoneCore *lc,bool_t rtp_no_xmit_on_audio_mute){ @@ -2562,87 +2549,9 @@ void linphone_core_iterate(LinphoneCore *lc){ } } -static LinphoneAddress* _linphone_core_destroy_addr_if_not_sip( LinphoneAddress* addr ){ - if( linphone_address_is_sip(addr) ) { - return addr; - } else { - linphone_address_destroy(addr); - return NULL; - } -} - -/** - * Interpret a call destination as supplied by the user, and returns a fully qualified - * LinphoneAddress. - * - * @ingroup call_control - * - * A sip address should look like DisplayName \ . - * Basically this function performs the following tasks - * - if a phone number is entered, prepend country prefix of the default proxy - * configuration, eventually escape the '+' by 00. - * - if no domain part is supplied, append the domain name of the default proxy - * - if no sip: is present, prepend it - * - * The result is a syntaxically correct SIP address. -**/ - LinphoneAddress * linphone_core_interpret_url(LinphoneCore *lc, const char *url){ - enum_lookup_res_t *enumres=NULL; - char *enum_domain=NULL; - LinphoneProxyConfig *proxy=lc->default_proxy; - char *tmpurl; - LinphoneAddress *uri; - - if (*url=='\0') return NULL; - - if (is_enum(url,&enum_domain)){ - linphone_core_notify_display_status(lc,_("Looking for telephone number destination...")); - if (enum_lookup(enum_domain,&enumres)<0){ - linphone_core_notify_display_status(lc,_("Could not resolve this number.")); - ms_free(enum_domain); - return NULL; - } - ms_free(enum_domain); - tmpurl=enumres->sip_address[0]; - uri=linphone_address_new(tmpurl); - enum_lookup_res_free(enumres); - return _linphone_core_destroy_addr_if_not_sip(uri); - } - /* check if we have a "sip:" or a "sips:" */ - if ( (strstr(url,"sip:")==NULL) && (strstr(url,"sips:")==NULL) ){ - /* this doesn't look like a true sip uri */ - if (strchr(url,'@')!=NULL){ - /* seems like sip: is missing !*/ - tmpurl=ms_strdup_printf("sip:%s",url); - uri=linphone_address_new(tmpurl); - ms_free(tmpurl); - if (uri){ - return _linphone_core_destroy_addr_if_not_sip(uri); - } - } - - if (proxy!=NULL){ - /* append the proxy domain suffix */ - const char *identity=linphone_proxy_config_get_identity(proxy); - char normalized_username[128]; - uri=linphone_address_new(identity); - if (uri==NULL){ - return NULL; - } - linphone_address_set_display_name(uri,NULL); - linphone_proxy_config_normalize_number(proxy,url,normalized_username, - sizeof(normalized_username)); - linphone_address_set_username(uri,normalized_username); - return _linphone_core_destroy_addr_if_not_sip(uri); - }else return NULL; - } - uri=linphone_address_new(url); - if (uri!=NULL){ - return _linphone_core_destroy_addr_if_not_sip(uri); - } - - return NULL; + LinphoneProxyConfig *proxy = linphone_core_get_default_proxy_config(lc); + return linphone_proxy_config_normalize_sip_uri(proxy, url); } /** @@ -3361,12 +3270,13 @@ int linphone_core_start_update_call(LinphoneCore *lc, LinphoneCall *call){ **/ int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const LinphoneCallParams *params){ int err=0; - LinphoneCallState nextstate; + LinphoneCallState nextstate, initial_state; + #if defined(VIDEO_ENABLED) && defined(BUILD_UPNP) bool_t has_video = FALSE; #endif - switch(call->state){ + switch(initial_state=call->state){ case LinphoneCallIncomingReceived: case LinphoneCallIncomingEarlyMedia: case LinphoneCallOutgoingRinging: @@ -3419,7 +3329,11 @@ int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const Linpho } } #endif //defined(VIDEO_ENABLED) && defined(BUILD_UPNP) - err = linphone_core_start_update_call(lc, call); + if ((err = linphone_core_start_update_call(lc, call)) && call->state!=initial_state) { + /*Restore initial state*/ + linphone_call_set_state(call,initial_state,NULL); + } + }else{ #ifdef VIDEO_ENABLED if ((call->videostream != NULL) && (call->state == LinphoneCallStreamsRunning)) { @@ -5065,7 +4979,7 @@ static void toggle_video_preview(LinphoneCore *lc, bool_t val){ video_preview_set_size(lc->previewstream,vsize); if (display_filter) video_preview_set_display_filter_name(lc->previewstream,display_filter); - if (lc->preview_window_id!=0) + if (lc->preview_window_id != NULL) video_preview_set_native_window_id(lc->previewstream,lc->preview_window_id); video_preview_set_fps(lc->previewstream,linphone_core_get_preferred_framerate(lc)); video_preview_start(lc->previewstream,lc->video_conf.device); @@ -5365,7 +5279,7 @@ float linphone_core_get_static_picture_fps(LinphoneCore *lc) { * * @ingroup media_parameters **/ -unsigned long linphone_core_get_native_video_window_id(const LinphoneCore *lc){ +void * linphone_core_get_native_video_window_id(const LinphoneCore *lc){ if (lc->video_window_id) { /* case where the video id was previously set by the app*/ return lc->video_window_id; @@ -5381,13 +5295,17 @@ unsigned long linphone_core_get_native_video_window_id(const LinphoneCore *lc){ } /* unsets the video id for all calls (indeed it may be kept by filters or videostream object itself by paused calls)*/ -static void unset_video_window_id(LinphoneCore *lc, bool_t preview, unsigned long id){ +static void unset_video_window_id(LinphoneCore *lc, bool_t preview, void *id){ #ifdef VIDEO_ENABLED LinphoneCall *call; MSList *elem; #endif - if (id!=0 && id!=-1) { + if ((id != NULL) +#ifndef _WIN32 + && ((unsigned long)id != (unsigned long)-1) +#endif + ){ ms_error("Invalid use of unset_video_window_id()"); return; } @@ -5404,13 +5322,12 @@ static void unset_video_window_id(LinphoneCore *lc, bool_t preview, unsigned lon #endif } -/** - * @ingroup media_parameters - * Set the native video window id where the video is to be displayed. - * For MacOS, Linux, Windows: if not set or zero the core will create its own window, unless the special id -1 is given. -**/ -void linphone_core_set_native_video_window_id(LinphoneCore *lc, unsigned long id){ - if (id==0 || id==(unsigned long)-1){ +void linphone_core_set_native_video_window_id(LinphoneCore *lc, void *id){ + if ((id == NULL) +#ifndef _WIN32 + || ((unsigned long)id == (unsigned long)-1) +#endif + ){ unset_video_window_id(lc,FALSE,id); } lc->video_window_id=id; @@ -5429,7 +5346,7 @@ void linphone_core_set_native_video_window_id(LinphoneCore *lc, unsigned long id * * @ingroup media_parameters **/ -unsigned long linphone_core_get_native_preview_window_id(const LinphoneCore *lc){ +void * linphone_core_get_native_preview_window_id(const LinphoneCore *lc){ if (lc->preview_window_id){ /*case where the id was set by the app previously*/ return lc->preview_window_id; @@ -5452,8 +5369,12 @@ unsigned long linphone_core_get_native_preview_window_id(const LinphoneCore *lc) * This has to be used in conjonction with linphone_core_use_preview_window(). * MacOS, Linux, Windows: if not set or zero the core will create its own window, unless the special id -1 is given. **/ -void linphone_core_set_native_preview_window_id(LinphoneCore *lc, unsigned long id){ - if (id==0 || id==(unsigned long)-1){ +void linphone_core_set_native_preview_window_id(LinphoneCore *lc, void *id){ + if ((id == NULL) +#ifndef _WIN32 + || ((unsigned long)id == (unsigned long)-1) +#endif + ) { unset_video_window_id(lc,TRUE,id); } lc->preview_window_id=id; @@ -6020,7 +5941,8 @@ void sip_config_uninit(LinphoneCore *lc) sal_iterate(lc->sal); for(elem=config->proxies;elem!=NULL;elem=ms_list_next(elem)){ LinphoneProxyConfig *cfg=(LinphoneProxyConfig*)(elem->data); - still_registered|=linphone_proxy_config_is_registered(cfg); + LinphoneRegistrationState state = linphone_proxy_config_get_state(cfg); + still_registered|=(state==LinphoneRegistrationOk||state==LinphoneRegistrationProgress); } ms_usleep(100000); } @@ -6474,6 +6396,21 @@ LinphonePayloadType* linphone_core_find_payload_type(LinphoneCore* lc, const cha return NULL; } +const char* linphone_configuring_state_to_string(LinphoneConfiguringState cs){ + switch(cs){ + case LinphoneConfiguringSuccessful: + return "LinphoneConfiguringSuccessful"; + break; + case LinphoneConfiguringFailed: + return "LinphoneConfiguringFailed"; + break; + case LinphoneConfiguringSkipped: + return "LinphoneConfiguringSkipped"; + break; + } + return NULL; +} + const char *linphone_global_state_to_string(LinphoneGlobalState gs){ switch(gs){ case LinphoneGlobalOff: diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index f57b6aad6..e9a3d9161 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -598,7 +598,7 @@ LINPHONE_PUBLIC void linphone_player_close(LinphonePlayer *obj); LINPHONE_PUBLIC void linphone_player_destroy(LinphonePlayer *obj); /** - * @brief Create an independent media file player. + * Create an independent media file player. * This player support WAVE and MATROSKA formats. * @param lc A LinphoneCore object * @param snd_card Playback sound card. If NULL, the sound card set in LinphoneCore will be used @@ -606,10 +606,10 @@ LINPHONE_PUBLIC void linphone_player_destroy(LinphonePlayer *obj); * @param window_id Id of the drawing window. Depend of video out * @return A pointer on the new instance. NULL if faild. */ -LINPHONE_PUBLIC LinphonePlayer *linphone_core_create_local_player(LinphoneCore *lc, MSSndCard *snd_card, const char *video_out, unsigned long window_id); +LINPHONE_PUBLIC LinphonePlayer *linphone_core_create_local_player(LinphoneCore *lc, MSSndCard *snd_card, const char *video_out, void *window_id); /** - * @brief Check whether Matroksa format is supported by the player + * Check whether Matroksa format is supported by the player * @return TRUE if it is supported */ LINPHONE_PUBLIC bool_t linphone_local_player_matroska_supported(void); @@ -721,6 +721,47 @@ LINPHONE_PUBLIC const char *linphone_call_get_remote_user_agent(LinphoneCall *ca LINPHONE_PUBLIC const char *linphone_call_get_remote_contact(LinphoneCall *call); LINPHONE_PUBLIC float linphone_call_get_play_volume(LinphoneCall *call); LINPHONE_PUBLIC float linphone_call_get_record_volume(LinphoneCall *call); + +/** + * Get speaker volume gain. + * If the sound backend supports it, the returned gain is equal to the gain set + * with the system mixer. + * + * @param call The call. + * @return Percenatge of the max supported volume gain. Valid values are in [ 0.0 : 1.0 ]. + * In case of failure, a negative value is returned + */ +LINPHONE_PUBLIC float linphone_call_get_speaker_volume_gain(const LinphoneCall *call); + +/** + * Set speaker volume gain. + * If the sound backend supports it, the new gain will synchronized with the system mixer. + * + * @param call The call. + * @param volume Percentage of the max supported gain. Valid values are in [ 0.0 : 1.0 ]. + */ +LINPHONE_PUBLIC void linphone_call_set_speaker_volume_gain(LinphoneCall *call, float volume); + +/** + * Get microphone volume gain. + * If the sound backend supports it, the returned gain is equal to the gain set + * with the system mixer. + * + * @param call The call. + * @return double Percenatge of the max supported volume gain. Valid values are in [ 0.0 : 1.0 ]. + * In case of failure, a negative value is returned + */ +LINPHONE_PUBLIC float linphone_call_get_microphone_volume_gain(const LinphoneCall *call); + +/** + * Set microphone volume gain. + * If the sound backend supports it, the new gain will synchronized with the system mixer. + * + * @param call The call. + * @param volume Percentage of the max supported gain. Valid values are in [ 0.0 : 1.0 ]. + */ +LINPHONE_PUBLIC void linphone_call_set_microphone_volume_gain(LinphoneCall *call, float volume); + LINPHONE_PUBLIC float linphone_call_get_current_quality(LinphoneCall *call); LINPHONE_PUBLIC float linphone_call_get_average_quality(LinphoneCall *call); LINPHONE_PUBLIC const char* linphone_call_get_authentication_token(LinphoneCall *call); @@ -774,14 +815,14 @@ LINPHONE_PUBLIC void linphone_call_cancel_dtmfs(LinphoneCall *call); * Get the native window handle of the video window, casted as an unsigned long. * @ingroup media_parameters **/ -LINPHONE_PUBLIC unsigned long linphone_call_get_native_video_window_id(const LinphoneCall *call); +LINPHONE_PUBLIC void * linphone_call_get_native_video_window_id(const LinphoneCall *call); /** * Set the native video window id where the video is to be displayed. * For MacOS, Linux, Windows: if not set or 0 a window will be automatically created, unless the special id -1 is given. * @ingroup media_parameters **/ -LINPHONE_PUBLIC void linphone_call_set_native_video_window_id(LinphoneCall *call, unsigned long id); +LINPHONE_PUBLIC void linphone_call_set_native_video_window_id(LinphoneCall *call, void * id); /** * Return TRUE if this call is currently part of a conference @@ -867,323 +908,8 @@ typedef enum _LinphoneRegistrationState{ * @param cs sate */ LINPHONE_PUBLIC const char *linphone_registration_state_to_string(LinphoneRegistrationState cs); -LINPHONE_PUBLIC LinphoneProxyConfig *linphone_proxy_config_new(void); -/** - * Acquire a reference to the proxy config. - * @param[in] cfg The proxy config. - * @return The same proxy config. -**/ -LINPHONE_PUBLIC LinphoneProxyConfig *linphone_proxy_config_ref(LinphoneProxyConfig *cfg); - -/** - * Release reference to the proxy config. - * @param[in] cfg The proxy config. -**/ -LINPHONE_PUBLIC void linphone_proxy_config_unref(LinphoneProxyConfig *cfg); - -/** - * Retrieve the user pointer associated with the proxy config. - * @param[in] cfg The proxy config. - * @return The user pointer associated with the proxy config. -**/ -LINPHONE_PUBLIC void *linphone_proxy_config_get_user_data(const LinphoneProxyConfig *cfg); - -/** - * Assign a user pointer to the proxy config. - * @param[in] cfg The proxy config. - * @param[in] ud The user pointer to associate with the proxy config. -**/ -LINPHONE_PUBLIC void linphone_proxy_config_set_user_data(LinphoneProxyConfig *cfg, void *ud); - -LINPHONE_PUBLIC int linphone_proxy_config_set_server_addr(LinphoneProxyConfig *obj, const char *server_addr); -LINPHONE_PUBLIC int linphone_proxy_config_set_identity(LinphoneProxyConfig *obj, const char *identity); -LINPHONE_PUBLIC int linphone_proxy_config_set_route(LinphoneProxyConfig *obj, const char *route); - -/** - * Sets the registration expiration time in seconds. -**/ -LINPHONE_PUBLIC void linphone_proxy_config_set_expires(LinphoneProxyConfig *obj, int expires); - -#define linphone_proxy_config_expires linphone_proxy_config_set_expires -/** - * Indicates either or not, REGISTRATION must be issued for this #LinphoneProxyConfig . - *
In case this #LinphoneProxyConfig has been added to #LinphoneCore, follows the linphone_proxy_config_edit() rule. - * @param obj object pointer - * @param val if true, registration will be engaged - */ -LINPHONE_PUBLIC void linphone_proxy_config_enable_register(LinphoneProxyConfig *obj, bool_t val); -#define linphone_proxy_config_enableregister linphone_proxy_config_enable_register -LINPHONE_PUBLIC void linphone_proxy_config_edit(LinphoneProxyConfig *obj); -LINPHONE_PUBLIC int linphone_proxy_config_done(LinphoneProxyConfig *obj); -/** - * Indicates either or not, PUBLISH must be issued for this #LinphoneProxyConfig . - *
In case this #LinphoneProxyConfig has been added to #LinphoneCore, follows the linphone_proxy_config_edit() rule. - * @param obj object pointer - * @param val if true, publish will be engaged - * - */ -LINPHONE_PUBLIC void linphone_proxy_config_enable_publish(LinphoneProxyConfig *obj, bool_t val); -/** - * Set the publish expiration time in second. - * @param obj proxy config - * @param expires in second - * */ - -LINPHONE_PUBLIC void linphone_proxy_config_set_publish_expires(LinphoneProxyConfig *obj, int expires); -/** - * get the publish expiration time in second. Default value is the registration expiration value. - * @param obj proxy config - * @return expires in second - * */ - -LINPHONE_PUBLIC int linphone_proxy_config_get_publish_expires(const LinphoneProxyConfig *obj); - -LINPHONE_PUBLIC void linphone_proxy_config_set_dial_escape_plus(LinphoneProxyConfig *cfg, bool_t val); -LINPHONE_PUBLIC void linphone_proxy_config_set_dial_prefix(LinphoneProxyConfig *cfg, const char *prefix); - - /** - * Indicates whether quality statistics during call should be stored and sent to a collector according to RFC 6035. - * @param[in] cfg #LinphoneProxyConfig object - * @param[in] enable True to sotre quality statistics and sent them to the collector, false to disable it. - */ -LINPHONE_PUBLIC void linphone_proxy_config_enable_quality_reporting(LinphoneProxyConfig *cfg, bool_t enable); - -/** - * Indicates whether quality statistics during call should be stored and sent to a collector according to RFC 6035. - * @param[in] cfg #LinphoneProxyConfig object - * @return True if quality repotring is enabled, false otherwise. - */ -LINPHONE_PUBLIC bool_t linphone_proxy_config_quality_reporting_enabled(LinphoneProxyConfig *cfg); - - /** - * Set the route of the collector end-point when using quality reporting. This SIP address - * should be used on server-side to process packets directly before discarding packets. Collector address - * should be a non existing account and will not receive any messages. - * If NULL, reports will be send to the proxy domain. - * @param[in] cfg #LinphoneProxyConfig object - * @param[in] collector route of the collector end-point, if NULL PUBLISH will be sent to the proxy domain. - */ -LINPHONE_PUBLIC void linphone_proxy_config_set_quality_reporting_collector(LinphoneProxyConfig *cfg, const char *collector); - - /** - * Get the route of the collector end-point when using quality reporting. This SIP address - * should be used on server-side to process packets directly before discarding packets. Collector address - * should be a non existing account and will not receive any messages. - * If NULL, reports will be send to the proxy domain. - * @param[in] cfg #LinphoneProxyConfig object - * @return The SIP address of the collector end-point. - */ -LINPHONE_PUBLIC const char *linphone_proxy_config_get_quality_reporting_collector(const LinphoneProxyConfig *cfg); - -/** - * Set the interval between 2 interval reports sending when using quality reporting. If call exceed interval size, an - * interval report will be sent to the collector. On call termination, a session report will be sent - * for the remaining period. Value must be 0 (disabled) or positive. - * @param[in] cfg #LinphoneProxyConfig object - * @param[in] interval The interval in seconds, 0 means interval reports are disabled. - */ -LINPHONE_PUBLIC void linphone_proxy_config_set_quality_reporting_interval(LinphoneProxyConfig *cfg, uint8_t interval); - -/** - * Get the interval between interval reports when using quality reporting. - * @param[in] cfg #LinphoneProxyConfig object - * @return The interval in seconds, 0 means interval reports are disabled. - */ - -LINPHONE_PUBLIC int linphone_proxy_config_get_quality_reporting_interval(LinphoneProxyConfig *cfg); - -/** - * Get the registration state of the given proxy config. - * @param[in] obj #LinphoneProxyConfig object. - * @return The registration state of the proxy config. -**/ -LINPHONE_PUBLIC LinphoneRegistrationState linphone_proxy_config_get_state(const LinphoneProxyConfig *obj); - -LINPHONE_PUBLIC bool_t linphone_proxy_config_is_registered(const LinphoneProxyConfig *obj); - -/** - * Get the domain name of the given proxy config. - * @param[in] cfg #LinphoneProxyConfig object. - * @return The domain name of the proxy config. -**/ -LINPHONE_PUBLIC const char *linphone_proxy_config_get_domain(const LinphoneProxyConfig *cfg); - -/** - * Get the realm of the given proxy config. - * @param[in] cfg #LinphoneProxyConfig object. - * @return The realm of the proxy config. -**/ -LINPHONE_PUBLIC const char *linphone_proxy_config_get_realm(const LinphoneProxyConfig *cfg); -/** - * Set the realm of the given proxy config. - * @param[in] cfg #LinphoneProxyConfig object. - * @param[in] realm New realm value. - * @return The realm of the proxy config. -**/ -LINPHONE_PUBLIC void linphone_proxy_config_set_realm(LinphoneProxyConfig *cfg, const char * realm); - -LINPHONE_PUBLIC const char *linphone_proxy_config_get_route(const LinphoneProxyConfig *obj); -LINPHONE_PUBLIC const char *linphone_proxy_config_get_identity(const LinphoneProxyConfig *obj); -LINPHONE_PUBLIC bool_t linphone_proxy_config_publish_enabled(const LinphoneProxyConfig *obj); -LINPHONE_PUBLIC const char *linphone_proxy_config_get_server_addr(const LinphoneProxyConfig *obj); -#define linphone_proxy_config_get_addr linphone_proxy_config_get_server_addr -LINPHONE_PUBLIC int linphone_proxy_config_get_expires(const LinphoneProxyConfig *obj); -LINPHONE_PUBLIC bool_t linphone_proxy_config_register_enabled(const LinphoneProxyConfig *obj); -LINPHONE_PUBLIC void linphone_proxy_config_refresh_register(LinphoneProxyConfig *obj); -LINPHONE_PUBLIC void linphone_proxy_config_pause_register(LinphoneProxyConfig *obj); -LINPHONE_PUBLIC const char *linphone_proxy_config_get_contact_parameters(const LinphoneProxyConfig *obj); -LINPHONE_PUBLIC void linphone_proxy_config_set_contact_parameters(LinphoneProxyConfig *obj, const char *contact_params); -LINPHONE_PUBLIC void linphone_proxy_config_set_contact_uri_parameters(LinphoneProxyConfig *obj, const char *contact_uri_params); -LINPHONE_PUBLIC const char* linphone_proxy_config_get_contact_uri_parameters(const LinphoneProxyConfig *obj); - -/** - * Get the #LinphoneCore object to which is associated the #LinphoneProxyConfig. - * @param[in] obj #LinphoneProxyConfig object. - * @return The #LinphoneCore object to which is associated the #LinphoneProxyConfig. -**/ -LINPHONE_PUBLIC LinphoneCore * linphone_proxy_config_get_core(const LinphoneProxyConfig *obj); - -LINPHONE_PUBLIC bool_t linphone_proxy_config_get_dial_escape_plus(const LinphoneProxyConfig *cfg); -LINPHONE_PUBLIC const char * linphone_proxy_config_get_dial_prefix(const LinphoneProxyConfig *cfg); - -/** - * Get the reason why registration failed when the proxy config state is LinphoneRegistrationFailed. - * @param[in] cfg #LinphoneProxyConfig object. - * @return The reason why registration failed for this proxy config. -**/ -LINPHONE_PUBLIC LinphoneReason linphone_proxy_config_get_error(const LinphoneProxyConfig *cfg); - -/** - * Get detailed information why registration failed when the proxy config state is LinphoneRegistrationFailed. - * @param[in] cfg #LinphoneProxyConfig object. - * @return The details why registration failed for this proxy config. -**/ -LINPHONE_PUBLIC const LinphoneErrorInfo *linphone_proxy_config_get_error_info(const LinphoneProxyConfig *cfg); - -/** - * Get the transport from either service route, route or addr. - * @param[in] cfg #LinphoneProxyConfig object. - * @return The transport as a string (I.E udp, tcp, tls, dtls) -**/ -LINPHONE_PUBLIC const char* linphone_proxy_config_get_transport(const LinphoneProxyConfig *cfg); - - -/* destruction is called automatically when removing the proxy config */ -LINPHONE_PUBLIC void linphone_proxy_config_destroy(LinphoneProxyConfig *cfg); -LINPHONE_PUBLIC void linphone_proxy_config_set_sip_setup(LinphoneProxyConfig *cfg, const char *type); -LINPHONE_PUBLIC SipSetupContext *linphone_proxy_config_get_sip_setup_context(LinphoneProxyConfig *cfg); -LINPHONE_PUBLIC SipSetup *linphone_proxy_config_get_sip_setup(LinphoneProxyConfig *cfg); - -/** - * Detect if the given input is a phone number or not. - * @param proxy #LinphoneProxyConfig argument, unused yet but may contain useful data. Can be NULL. - * @param username string to parse. - * @return TRUE if input is a phone number, FALSE otherwise. -**/ -LINPHONE_PUBLIC bool_t linphone_proxy_config_is_phone_number(LinphoneProxyConfig *proxy, const char *username); - -/** - * Normalize a human readable phone number into a basic string. 888-444-222 becomes 888444222 - * or +33888444222 depending on the #LinphoneProxyConfig object. However this argument is OPTIONNAL - * and if not provided, a default one will be used. - * This function will always generate a normalized username; if input is not a phone number, output will be a copy of input. - * @param proxy #LinphoneProxyConfig object containing country code and/or escape symbol. If NULL passed, will use default configuration. - * @param username the string to parse - * @param result the newly normalized number - * @param result_len the size of the normalized number \a result - * @return TRUE if a phone number was recognized, FALSE otherwise. - */ -LINPHONE_PUBLIC bool_t linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const char *username, - char *result, size_t result_len); - -/** - * Set default privacy policy for all calls routed through this proxy. - * @param cfg #LinphoneProxyConfig object to be modified - * @param privacy LinphonePrivacy to configure privacy - * */ -LINPHONE_PUBLIC void linphone_proxy_config_set_privacy(LinphoneProxyConfig *cfg, LinphonePrivacyMask privacy); -/** - * Get default privacy policy for all calls routed through this proxy. - * @param cfg #LinphoneProxyConfig object - * @return Privacy mode - * */ -LINPHONE_PUBLIC LinphonePrivacyMask linphone_proxy_config_get_privacy(const LinphoneProxyConfig *cfg); -/** - * Set the http file transfer server to be used for content type application/vnd.gsma.rcs-ft-http+xml - * @param cfg #LinphoneProxyConfig object to be modified - * @param server_url URL of the file server like https://file.linphone.org/upload.php - * */ -LINPHONE_PUBLIC void linphone_proxy_config_set_file_transfer_server(LinphoneProxyConfig *cfg, const char * server_url); -/** - * Get the http file transfer server to be used for content type application/vnd.gsma.rcs-ft-http+xml - * @param cfg #LinphoneProxyConfig object - * @return URL of the file server like https://file.linphone.org/upload.php - * */ -LINPHONE_PUBLIC const char* linphone_proxy_config_get_file_transfer_server(const LinphoneProxyConfig *cfg); - -/** - * Indicates whether AVPF/SAVPF must be used for calls using this proxy config. - * @param[in] cfg #LinphoneProxyConfig object - * @param[in] enable True to enable AVPF/SAVF, false to disable it. - * @deprecated use linphone_proxy_config_set_avpf_mode() - */ -LINPHONE_PUBLIC void linphone_proxy_config_enable_avpf(LinphoneProxyConfig *cfg, bool_t enable); - -/** - * Indicates whether AVPF/SAVPF is being used for calls using this proxy config. - * @param[in] cfg #LinphoneProxyConfig object - * @return True if AVPF/SAVPF is enabled, false otherwise. - * @deprecated use linphone_proxy_config_set_avpf_mode() - */ -LINPHONE_PUBLIC bool_t linphone_proxy_config_avpf_enabled(LinphoneProxyConfig *cfg); - -/** - * Set the interval between regular RTCP reports when using AVPF/SAVPF. - * @param[in] cfg #LinphoneProxyConfig object - * @param[in] interval The interval in seconds (between 0 and 5 seconds). - */ -LINPHONE_PUBLIC void linphone_proxy_config_set_avpf_rr_interval(LinphoneProxyConfig *cfg, uint8_t interval); - -/** - * Get the interval between regular RTCP reports when using AVPF/SAVPF. - * @param[in] cfg #LinphoneProxyConfig object - * @return The interval in seconds. - */ -LINPHONE_PUBLIC uint8_t linphone_proxy_config_get_avpf_rr_interval(const LinphoneProxyConfig *cfg); - -/** - * Get enablement status of RTCP feedback (also known as AVPF profile). - * @param[in] cfg the proxy config - * @return the enablement mode, which can be LinphoneAVPFDefault (use LinphoneCore's mode), LinphoneAVPFEnabled (avpf is enabled), or LinphoneAVPFDisabled (disabled). -**/ -LINPHONE_PUBLIC LinphoneAVPFMode linphone_proxy_config_get_avpf_mode(const LinphoneProxyConfig *cfg); - -/** - * Enable the use of RTCP feedback (also known as AVPF profile). - * @param[in] cfg the proxy config - * @param[in] mode the enablement mode, which can be LinphoneAVPFDefault (use LinphoneCore's mode), LinphoneAVPFEnabled (avpf is enabled), or LinphoneAVPFDisabled (disabled). -**/ -LINPHONE_PUBLIC void linphone_proxy_config_set_avpf_mode(LinphoneProxyConfig *cfg, LinphoneAVPFMode mode); - -/** - * Obtain the value of a header sent by the server in last answer to REGISTER. - * @param cfg the proxy config object - * @param header_name the header name for which to fetch corresponding value - * @return the value of the queried header. -**/ -LINPHONE_PUBLIC const char *linphone_proxy_config_get_custom_header(LinphoneProxyConfig *cfg, const char *header_name); - -/** - * Set the value of a custom header sent to the server in REGISTERs request. - * @param cfg the proxy config object - * @param header_name the header name - * @param header_value the header's value -**/ -LINPHONE_PUBLIC void linphone_proxy_config_set_custom_header(LinphoneProxyConfig *cfg, const char *header_name, const char *header_value); -/** - * @} -**/ +#include "linphone_proxy_config.h" struct _LinphoneAuthInfo; @@ -2141,6 +1867,12 @@ typedef enum _LinphoneConfiguringState { LinphoneConfiguringSkipped } LinphoneConfiguringState; +/** + * Converts a _LinphoneConfiguringState enum to a string. + * @ingroup misc +**/ +LINPHONE_PUBLIC const char *linphone_configuring_state_to_string(LinphoneConfiguringState cs); + /** * Callback prototype for configuring status changes notification * @param lc the LinphoneCore @@ -2498,6 +2230,7 @@ LINPHONE_PUBLIC void linphone_core_remove_listener(LinphoneCore *lc, const Linph /*sets the user-agent string in sip messages, ideally called just after linphone_core_new() or linphone_core_init() */ LINPHONE_PUBLIC void linphone_core_set_user_agent(LinphoneCore *lc, const char *ua_name, const char *version); +/** @deprecated Use linphone_proxy_config_normalize_sip_uri instead. */ LINPHONE_PUBLIC LinphoneAddress * linphone_core_interpret_url(LinphoneCore *lc, const char *url); LINPHONE_PUBLIC LinphoneCall * linphone_core_invite(LinphoneCore *lc, const char *url); @@ -2916,6 +2649,10 @@ LINPHONE_PUBLIC bool_t linphone_core_check_payload_type_usability(LinphoneCore * */ LINPHONE_PUBLIC LinphoneProxyConfig * linphone_core_create_proxy_config(LinphoneCore *lc); +/** + * Add a proxy configuration. + * This will start registration on the proxy, if registration is enabled. +**/ LINPHONE_PUBLIC int linphone_core_add_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *config); /** @@ -2925,6 +2662,12 @@ LINPHONE_PUBLIC int linphone_core_add_proxy_config(LinphoneCore *lc, LinphonePro **/ LINPHONE_PUBLIC void linphone_core_clear_proxy_config(LinphoneCore *lc); +/** + * Removes a proxy configuration. + * + * LinphoneCore will then automatically unregister and place the proxy configuration + * on a deleted list. For that reason, a removed proxy does NOT need to be freed. +**/ LINPHONE_PUBLIC void linphone_core_remove_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *config); /** @@ -2939,10 +2682,28 @@ LINPHONE_PUBLIC const MSList *linphone_core_get_proxy_config_list(const Linphone LINPHONE_PUBLIC void linphone_core_set_default_proxy_index(LinphoneCore *lc, int index); +/** + * @return the default proxy configuration, that is the one used to determine the current identity. + * @deprecated Use linphone_core_get_default_proxy_config() instead. +**/ LINPHONE_PUBLIC int linphone_core_get_default_proxy(LinphoneCore *lc, LinphoneProxyConfig **config); +/** + * @return the default proxy configuration, that is the one used to determine the current identity. + * @param[in] lc LinphoneCore object + * @return The default proxy configuration. +**/ LINPHONE_PUBLIC LinphoneProxyConfig * linphone_core_get_default_proxy_config(LinphoneCore *lc); +/** + * Sets the default proxy. + * + * This default proxy must be part of the list of already entered LinphoneProxyConfig. + * Toggling it as default will make LinphoneCore use the identity associated with + * the proxy configuration in all incoming and outgoing calls. + * @param[in] lc LinphoneCore object + * @param[in] config The proxy configuration to use as the default one. +**/ LINPHONE_PUBLIC void linphone_core_set_default_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *config); /** @@ -2989,7 +2750,14 @@ LINPHONE_PUBLIC bool_t linphone_core_audio_adaptive_jittcomp_enabled(LinphoneCor LINPHONE_PUBLIC int linphone_core_get_audio_jittcomp(LinphoneCore *lc); -LINPHONE_PUBLIC void linphone_core_set_audio_jittcomp(LinphoneCore *lc, int value); +/** + * Sets the nominal audio jitter buffer size in milliseconds. + * The value takes effect immediately for all running and pending calls, if any. + * A value of 0 disables the jitter buffer. + * + * @ingroup media_parameters +**/ +LINPHONE_PUBLIC void linphone_core_set_audio_jittcomp(LinphoneCore *lc, int milliseconds); /** * Enable or disable the video adaptive jitter compensation. @@ -3009,7 +2777,14 @@ LINPHONE_PUBLIC bool_t linphone_core_video_adaptive_jittcomp_enabled(LinphoneCor LINPHONE_PUBLIC int linphone_core_get_video_jittcomp(LinphoneCore *lc); -LINPHONE_PUBLIC void linphone_core_set_video_jittcomp(LinphoneCore *lc, int value); +/** + * Sets the nominal video jitter buffer size in milliseconds. + * The value takes effect immediately for all running and pending calls, if any. + * A value of 0 disables the jitter buffer. + * + * @ingroup media_parameters +**/ +LINPHONE_PUBLIC void linphone_core_set_video_jittcomp(LinphoneCore *lc, int milliseconds); LINPHONE_PUBLIC int linphone_core_get_audio_port(const LinphoneCore *lc); @@ -3560,11 +3335,28 @@ LINPHONE_PUBLIC int linphone_core_set_static_picture_fps(LinphoneCore *lc, float LINPHONE_PUBLIC float linphone_core_get_static_picture_fps(LinphoneCore *lc); /*function to be used for eventually setting window decorations (icons, title...)*/ -LINPHONE_PUBLIC unsigned long linphone_core_get_native_video_window_id(const LinphoneCore *lc); -LINPHONE_PUBLIC void linphone_core_set_native_video_window_id(LinphoneCore *lc, unsigned long id); +LINPHONE_PUBLIC void * linphone_core_get_native_video_window_id(const LinphoneCore *lc); -LINPHONE_PUBLIC unsigned long linphone_core_get_native_preview_window_id(const LinphoneCore *lc); -LINPHONE_PUBLIC void linphone_core_set_native_preview_window_id(LinphoneCore *lc, unsigned long id); +/** + * @ingroup media_parameters + * For MacOS, Linux, Windows: core will create its own window + * */ +#define LINPHONE_VIDEO_DISPLAY_AUTO (void*)((unsigned long) 0) +/** + * @ingroup media_parameters + * For MacOS, Linux, Windows: do nothing + * */ + +#define LINPHONE_VIDEO_DISPLAY_NONE (void*)((unsigned long) -1) +/** + * @ingroup media_parameters + * Set the native video window id where the video is to be displayed. + * For MacOS, Linux, Windows: if not set or LINPHONE_VIDEO_DISPLAY_AUTO the core will create its own window, unless the special id LINPHONE_VIDEO_DISPLAY_NONE is given. +**/ +LINPHONE_PUBLIC void linphone_core_set_native_video_window_id(LinphoneCore *lc, void *id); + +LINPHONE_PUBLIC void * linphone_core_get_native_preview_window_id(const LinphoneCore *lc); +LINPHONE_PUBLIC void linphone_core_set_native_preview_window_id(LinphoneCore *lc, void *id); /** * Tells the core to use a separate window for local camera preview video, instead of @@ -3777,6 +3569,11 @@ LINPHONE_PUBLIC LinphoneCall* linphone_core_find_call_from_uri(const LinphoneCor LINPHONE_PUBLIC int linphone_core_add_to_conference(LinphoneCore *lc, LinphoneCall *call); LINPHONE_PUBLIC int linphone_core_add_all_to_conference(LinphoneCore *lc); LINPHONE_PUBLIC int linphone_core_remove_from_conference(LinphoneCore *lc, LinphoneCall *call); +/** + * Indicates whether the local participant is part of a conference. + * @param lc the linphone core + * @return TRUE if the local participant is in a conference, FALSE otherwise. +**/ LINPHONE_PUBLIC bool_t linphone_core_is_in_conference(const LinphoneCore *lc); LINPHONE_PUBLIC int linphone_core_enter_conference(LinphoneCore *lc); LINPHONE_PUBLIC int linphone_core_leave_conference(LinphoneCore *lc); diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index dccaf6cfa..509712753 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -3488,7 +3488,7 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setVideoWindowId(JNIEnv* obj = env->NewGlobalRef(obj); ms_message("Java_org_linphone_core_LinphoneCoreImpl_setVideoWindowId(): NewGlobalRef(%p)",obj); }else ms_message("Java_org_linphone_core_LinphoneCoreImpl_setVideoWindowId(): setting to NULL"); - linphone_core_set_native_video_window_id((LinphoneCore*)lc,(unsigned long)obj); + linphone_core_set_native_video_window_id((LinphoneCore*)lc,(void *)obj); if (oldWindow != NULL) { ms_message("Java_org_linphone_core_LinphoneCoreImpl_setVideoWindowId(): DeleteGlobalRef(%p)",oldWindow); env->DeleteGlobalRef(oldWindow); @@ -3504,7 +3504,7 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setPreviewWindowId(JNIEn obj = env->NewGlobalRef(obj); ms_message("Java_org_linphone_core_LinphoneCoreImpl_setPreviewWindowId(): NewGlobalRef(%p)",obj); }else ms_message("Java_org_linphone_core_LinphoneCoreImpl_setPreviewWindowId(): setting to NULL"); - linphone_core_set_native_preview_window_id((LinphoneCore*)lc,(unsigned long)obj); + linphone_core_set_native_preview_window_id((LinphoneCore*)lc,(void *)obj); if (oldWindow != NULL) { ms_message("Java_org_linphone_core_LinphoneCoreImpl_setPreviewWindowId(): DeleteGlobalRef(%p)",oldWindow); env->DeleteGlobalRef(oldWindow); @@ -6031,7 +6031,7 @@ extern "C" void Java_org_linphone_core_LinphonePlayerImpl_destroy(JNIEnv *env, j extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_createLocalPlayer(JNIEnv *env, jobject jobj, jlong ptr, jobject window) { jobject window_ref = NULL; window_ref = env->NewGlobalRef(window); - LinphonePlayer *player = linphone_core_create_local_player((LinphoneCore *)ptr, NULL, "MSAndroidDisplay", (unsigned long)window_ref); + LinphonePlayer *player = linphone_core_create_local_player((LinphoneCore *)ptr, NULL, "MSAndroidDisplay", (void *)window_ref); if(player == NULL) { ms_error("Fails to create a player"); if(window_ref) env->DeleteGlobalRef(window_ref); diff --git a/coreapi/localplayer.c b/coreapi/localplayer.c index 964c1c920..eb53eb640 100644 --- a/coreapi/localplayer.c +++ b/coreapi/localplayer.c @@ -32,7 +32,7 @@ static void _local_player_close(LinphonePlayer *obj); static void _local_player_destroy(LinphonePlayer *obj); static void _local_player_eof_callback(void *user_data); -LinphonePlayer *linphone_core_create_local_player(LinphoneCore *lc, MSSndCard *snd_card, const char *video_out, unsigned long window_id) { +LinphonePlayer *linphone_core_create_local_player(LinphoneCore *lc, MSSndCard *snd_card, const char *video_out, void *window_id) { LinphonePlayer *obj = ms_new0(LinphonePlayer, 1); if(snd_card == NULL) snd_card = lc->sound_conf.ring_sndcard; if(video_out == NULL) video_out = linphone_core_get_video_display_filter(lc); diff --git a/coreapi/lpconfig.c b/coreapi/lpconfig.c index 2f09c133b..09889d06a 100644 --- a/coreapi/lpconfig.c +++ b/coreapi/lpconfig.c @@ -85,6 +85,17 @@ struct _LpConfig{ int readonly; }; +char* lp_realpath(const char* file, char* name) { +#ifdef _WIN32 + return ms_strdup(file); +#else + char * output = realpath(file, name); + char * msoutput = ms_strdup(output); + free(output); + return msoutput; +#endif +} + LpItem * lp_item_new(const char *key, const char *value){ LpItem *item=lp_new0(LpItem,1); item->key=ortp_strdup(key); @@ -359,16 +370,16 @@ LpConfig *lp_config_new_with_factory(const char *config_filename, const char *fa LpConfig *lpconfig=lp_new0(LpConfig,1); lpconfig->refcnt=1; if (config_filename!=NULL){ - ms_message("Using (r/w) config information from %s", config_filename); - lpconfig->filename=ortp_strdup(config_filename); - lpconfig->tmpfilename=ortp_strdup_printf("%s.tmp",config_filename); + lpconfig->filename=lp_realpath(config_filename, NULL); + lpconfig->tmpfilename=ortp_strdup_printf("%s.tmp",lpconfig->filename); + ms_message("Using (r/w) config information from %s", lpconfig->filename); #if !defined(_WIN32) { struct stat fileStat; - if ((stat(config_filename,&fileStat) == 0) && (S_ISREG(fileStat.st_mode))) { + if ((stat(lpconfig->filename,&fileStat) == 0) && (S_ISREG(fileStat.st_mode))) { /* make existing configuration files non-group/world-accessible */ - if (chmod(config_filename, S_IRUSR | S_IWUSR) == -1) { + if (chmod(lpconfig->filename, S_IRUSR | S_IWUSR) == -1) { ms_warning("unable to correct permissions on " "configuration file: %s", strerror(errno)); } @@ -400,14 +411,16 @@ LpConfig *lp_config_new_with_factory(const char *config_filename, const char *fa } int lp_config_read_file(LpConfig *lpconfig, const char *filename){ - FILE* f=fopen(filename,"r"); + char* path = lp_realpath(filename, NULL); + FILE* f=fopen(path,"r"); if (f!=NULL){ - ms_message("Reading config information from %s", filename); + ms_message("Reading config information from %s", path); lp_config_parse(lpconfig,f); fclose(f); return 0; } - ms_warning("Fail to open file %s",filename); + ms_warning("Fail to open file %s",path); + ms_free(path); return -1; } @@ -725,9 +738,11 @@ bool_t lp_config_relative_file_exists(const LpConfig *lpconfig, const char *file } else { char *dir = _lp_config_dirname(lpconfig->filename); char *filepath = ms_strdup_printf("%s/%s", dir, filename); - FILE *file = fopen(filepath, "r"); + char *realfilepath = lp_realpath(filepath, NULL); + FILE *file = fopen(realfilepath, "r"); ms_free(dir); ms_free(filepath); + ms_free(realfilepath); if (file) { fclose(file); } @@ -740,15 +755,17 @@ void lp_config_write_relative_file(const LpConfig *lpconfig, const char *filenam if(strlen(data) > 0) { char *dir = _lp_config_dirname(lpconfig->filename); char *filepath = ms_strdup_printf("%s/%s", dir, filename); - FILE *file = fopen(filepath, "w"); + char *realfilepath = lp_realpath(filepath, NULL); + FILE *file = fopen(realfilepath, "w"); if(file != NULL) { fprintf(file, "%s", data); fclose(file); } else { - ms_error("Could not open %s for write", filepath); + ms_error("Could not open %s for write", realfilepath); } ms_free(dir); ms_free(filepath); + ms_free(realfilepath); } else { ms_warning("%s has not been created because there is no data to write", filename); } @@ -758,27 +775,30 @@ int lp_config_read_relative_file(const LpConfig *lpconfig, const char *filename, char *dir; char *filepath; FILE *file; - + char* realfilepath; if (lpconfig->filename == NULL) return -1; dir = _lp_config_dirname(lpconfig->filename); filepath = ms_strdup_printf("%s/%s", dir, filename); - file = fopen(filepath, "r"); + realfilepath = lp_realpath(filepath, NULL); + file = fopen(realfilepath, "r"); if(file != NULL) { if(fread(data, 1, max_length, file)<=0) { - ms_error("%s could not be loaded. %s", filepath, strerror(errno)); + ms_error("%s could not be loaded. %s", realfilepath, strerror(errno)); goto err; } fclose(file); } else { - ms_error("Could not open %s for read. %s", filepath, strerror(errno)); + ms_error("Could not open %s for read. %s", realfilepath, strerror(errno)); goto err; } ms_free(dir); ms_free(filepath); + ms_free(realfilepath); return 0; err: ms_free(dir); ms_free(filepath); + ms_free(realfilepath); return -1; } diff --git a/coreapi/message_storage.c b/coreapi/message_storage.c index 22da7b8d0..a5985f4d3 100644 --- a/coreapi/message_storage.c +++ b/coreapi/message_storage.c @@ -38,6 +38,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define MAX_PATH_SIZE 1024 #include "sqlite3.h" +#include static ORTP_INLINE LinphoneChatMessage* get_transient_message(LinphoneChatRoom* cr, unsigned int storage_id){ MSList* transients = cr->transient_messages; @@ -286,6 +287,9 @@ void linphone_chat_room_mark_as_read(LinphoneChatRoom *cr){ char *buf; if (lc->db==NULL) return ; + + // optimization: do not modify the database if no message is marked as unread + if(linphone_chat_room_get_unread_messages_count(cr) == 0) return; peer=linphone_address_as_string_uri_only(linphone_chat_room_get_peer_address(cr)); buf=sqlite3_mprintf("UPDATE history SET read=%i WHERE remoteContact = %Q;", @@ -293,6 +297,8 @@ void linphone_chat_room_mark_as_read(LinphoneChatRoom *cr){ linphone_sql_request(lc->db,buf); sqlite3_free(buf); ms_free(peer); + + cr->unread_count = 0; } void linphone_chat_room_update_url(LinphoneChatRoom *cr, LinphoneChatMessage *msg) { @@ -315,6 +321,9 @@ static int linphone_chat_room_get_messages_count(LinphoneChatRoom *cr, bool_t un int returnValue; if (lc->db==NULL) return 0; + + // optimization: do not read database if the count is already available in memory + if(unread_only && cr->unread_count >= 0) return cr->unread_count; peer=linphone_address_as_string_uri_only(linphone_chat_room_get_peer_address(cr)); buf=sqlite3_mprintf("SELECT count(*) FROM history WHERE remoteContact = %Q %s;",peer,unread_only?"AND read = 0":""); @@ -327,6 +336,11 @@ static int linphone_chat_room_get_messages_count(LinphoneChatRoom *cr, bool_t un sqlite3_finalize(selectStatement); sqlite3_free(buf); ms_free(peer); + + /* no need to test the sign of cr->unread_count here + * because it has been tested above */ + if(unread_only) cr->unread_count = numrows; + return numrows; } @@ -347,6 +361,11 @@ void linphone_chat_room_delete_message(LinphoneChatRoom *cr, LinphoneChatMessage buf=sqlite3_mprintf("DELETE FROM history WHERE id = %i;", msg->storage_id); linphone_sql_request(lc->db,buf); sqlite3_free(buf); + + if(cr->unread_count >= 0 && !msg->is_read) { + assert(cr->unread_count > 0); + cr->unread_count--; + } } void linphone_chat_room_delete_history(LinphoneChatRoom *cr){ @@ -361,6 +380,8 @@ void linphone_chat_room_delete_history(LinphoneChatRoom *cr){ linphone_sql_request(lc->db,buf); sqlite3_free(buf); ms_free(peer); + + if(cr->unread_count > 0) cr->unread_count = 0; } MSList *linphone_chat_room_get_history_range(LinphoneChatRoom *cr, int startm, int endm){ diff --git a/coreapi/misc.c b/coreapi/misc.c index afa04f9bd..d94b170e3 100644 --- a/coreapi/misc.c +++ b/coreapi/misc.c @@ -266,7 +266,7 @@ bool_t linphone_core_check_payload_type_usability(LinphoneCore *lc, const Payloa } bool_t lp_spawn_command_line_sync(const char *command, char **result,int *command_ret){ -#if !defined(_WIN32_WCE) +#if !defined(_WIN32_WCE) && !defined(LINPHONE_WINDOWS_UNIVERSAL) FILE *f=popen(command,"r"); if (f!=NULL){ int err; diff --git a/coreapi/plugins/buddylookup/src/lookup.c b/coreapi/plugins/buddylookup/src/lookup.c index 48a8d3bb2..736e7aa35 100644 --- a/coreapi/plugins/buddylookup/src/lookup.c +++ b/coreapi/plugins/buddylookup/src/lookup.c @@ -81,7 +81,7 @@ static void fill_buddy_info(BLReq *blreq, BuddyInfo *bi, GHashTable *ht){ }else{ strncpy(bi->sip_uri,tmp,sizeof(bi->sip_uri)-1); } - + fill_item(ht,"street",bi->address.street,sizeof(bi->address.street)); fill_item(ht,"zip",bi->address.zip,sizeof(bi->address.zip)); fill_item(ht,"city",bi->address.town,sizeof(bi->address.town)); @@ -105,7 +105,7 @@ static void fill_buddy_info(BLReq *blreq, BuddyInfo *bi, GHashTable *ht){ ms_error("Fail to fetch the image %i",status); } } - + } static MSList * make_buddy_list(BLReq *blreq, GValue *retval){ @@ -156,7 +156,7 @@ static int xml_rpc_parse_response(BLReq *blreq, SoupMessage *sm){ #if SERIALIZE_HTTPS /*on windows libsoup support for threads with gnutls is not yet functionnal (only in git) -This will come in next release of libsoup, probably. +This will come in next release of libsoup, probably. In the meantime, we are forced to serialize all soup https processing with a big ugly global mutex...*/ @@ -191,27 +191,26 @@ static int lookup_buddy(SipSetupContext *ctx, BLReq *req){ LinphoneProxyConfig *cfg=sip_setup_context_get_proxy_config(ctx); LinphoneCore *lc=linphone_proxy_config_get_core(cfg); LpConfig *config=linphone_core_get_config(lc); - const char *identity=linphone_proxy_config_get_identity(cfg); + LinphoneAddress *from=linphone_proxy_config_get_identity_address(cfg); const char *url=lp_config_get_string(config,"BuddyLookup","url",NULL); - const LinphoneAuthInfo *aa; + const LinphoneAuthInfo *auth_info; SoupMessage *sm; - LinphoneAddress *from; - + char *identity; + if (url==NULL){ ms_error("No url defined for BuddyLookup in config file, aborting search."); return -1; } - - from=linphone_address_new(identity); - if (from==NULL){ - ms_error("Could not parse identity %s",identity); - return -1; + auth_info=linphone_core_find_auth_info(lc,linphone_address_get_domain(from),linphone_address_get_username(from)); + if (auth_info) { + ms_message("There is a password: %s",auth_info->passwd); + } else { + ms_message("No password for %s on %s",linphone_address_get_username(from),linphone_address_get_domain(from)); } - aa=linphone_core_find_auth_info(lc,linphone_address_get_domain(from),linphone_address_get_username(from)); - if (aa) ms_message("There is a password: %s",aa->passwd); - else ms_message("No password for %s on %s",linphone_address_get_username(from),linphone_address_get_domain(from)); - sm=build_xmlrpc_request(identity, aa ? aa->passwd : NULL, req->base.key, linphone_address_get_domain(from), url, req->base.max_results); - linphone_address_destroy(from); + + identity=linphone_proxy_config_get_identity(cfg); + sm=build_xmlrpc_request(identity, auth_info ? auth_info->passwd : NULL, req->base.key, linphone_address_get_domain(from), url, req->base.max_results); + ms_free(identity); req->msg=sm; ortp_thread_create(&req->th,NULL,process_xml_rpc_request,req); if (!sm) return -1; diff --git a/coreapi/private.h b/coreapi/private.h index f6a3ef131..2ba84988d 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -66,7 +66,20 @@ extern "C" { #endif #ifdef ENABLE_NLS + +#ifdef _MSC_VER +// prevent libintl.h from re-defining fprintf and vfprintf +#ifndef fprintf +#define fprintf fprintf +#endif +#ifndef vfprintf +#define vfprintf vfprintf +#endif +#define _GL_STDIO_H +#endif + #include + #ifndef _ #define _(String) dgettext(GETTEXT_PACKAGE,String) #endif @@ -252,7 +265,7 @@ struct _LinphoneCall{ StunCandidate ac,vc; /*audio video ip/port discovered by STUN*/ struct _AudioStream *audiostream; /**/ struct _VideoStream *videostream; - unsigned long video_window_id; + void *video_window_id; MSAudioEndpoint *endpoint; /*used for conferencing*/ char *refer_to; LinphoneCallParams *params; @@ -340,7 +353,6 @@ void _linphone_proxy_config_release(LinphoneProxyConfig *cfg); * Can be NULL * */ const LinphoneAddress* linphone_proxy_config_get_service_route(const LinphoneProxyConfig* cfg); -LINPHONE_PUBLIC char* linphone_proxy_config_get_contact(const LinphoneProxyConfig *cfg); void linphone_friend_close_subscriptions(LinphoneFriend *lf); void linphone_friend_update_subscribes(LinphoneFriend *fr, LinphoneProxyConfig *cfg, bool_t only_when_registered); @@ -478,6 +490,9 @@ typedef enum _LinphoneProxyConfigAddressComparisonResult{ LINPHONE_PUBLIC LinphoneProxyConfigAddressComparisonResult linphone_proxy_config_address_equal(const LinphoneAddress *a, const LinphoneAddress *b); LINPHONE_PUBLIC LinphoneProxyConfigAddressComparisonResult linphone_proxy_config_is_server_config_changed(const LinphoneProxyConfig* obj); +/** + * unregister without moving the register_enable flag + */ void _linphone_proxy_config_unregister(LinphoneProxyConfig *obj); void _linphone_proxy_config_release_ops(LinphoneProxyConfig *obj); @@ -494,9 +509,9 @@ struct _LinphoneProxyConfig struct _LinphoneCore *lc; char *reg_proxy; char *reg_identity; + LinphoneAddress* identity_address; char *reg_route; char *quality_reporting_collector; - char *domain; char *realm; char *contact_params; char *contact_uri_params; @@ -528,6 +543,7 @@ struct _LinphoneProxyConfig LinphoneAddress *saved_proxy; LinphoneAddress *saved_identity; /*---*/ + LinphoneAddress *pending_contact; /*use to store previous contact in case of network failure*/ }; @@ -556,6 +572,7 @@ struct _LinphoneChatRoom{ LinphoneAddress *peer_url; MSList *messages_hist; MSList *transient_messages; + int unread_count; LinphoneIsComposingState remote_is_composing; LinphoneIsComposingState is_composing; belle_sip_source_t *remote_composing_refresh_timer; @@ -784,8 +801,8 @@ struct _LinphoneCore int audio_bw; /*IP bw consumed by audio codec, set as soon as used codec is known, its purpose is to know the remaining bw for video*/ LinphoneCoreWaitingCallback wait_cb; void *wait_ctx; - unsigned long video_window_id; - unsigned long preview_window_id; + void *video_window_id; + void *preview_window_id; time_t netup_time; /*time when network went reachable */ struct _EcCalibrator *ecc; MSList *hooks; @@ -1066,6 +1083,7 @@ struct _LinphoneAccountCreator { char *route; char *email; bool_t subscribe_to_newsletter; + char *display_name; }; BELLE_SIP_DECLARE_VPTR(LinphoneAccountCreator); diff --git a/coreapi/proxy.c b/coreapi/proxy.c index 2cfa26b20..9d3bdc3d6 100644 --- a/coreapi/proxy.c +++ b/coreapi/proxy.c @@ -23,22 +23,23 @@ Copyright (C) 2000 Simon MORLAT (simon.morlat@linphone.org) #include "lpconfig.h" #include "private.h" #include "mediastreamer2/mediastream.h" +#include "enum.h" #include /*store current config related to server location*/ -static void linphone_proxy_config_store_server_config(LinphoneProxyConfig* obj) { - if (obj->saved_identity) linphone_address_destroy(obj->saved_identity); - if (obj->reg_identity) - obj->saved_identity = linphone_address_new(obj->reg_identity); +static void linphone_proxy_config_store_server_config(LinphoneProxyConfig* cfg) { + if (cfg->saved_identity) linphone_address_destroy(cfg->saved_identity); + if (cfg->identity_address) + cfg->saved_identity = linphone_address_clone(cfg->identity_address); else - obj->saved_identity = NULL; + cfg->saved_identity = NULL; - if (obj->saved_proxy) linphone_address_destroy(obj->saved_proxy); - if (obj->reg_proxy) - obj->saved_proxy = linphone_address_new(obj->reg_proxy); + if (cfg->saved_proxy) linphone_address_destroy(cfg->saved_proxy); + if (cfg->reg_proxy) + cfg->saved_proxy = linphone_address_new(cfg->reg_proxy); else - obj->saved_proxy = NULL; + cfg->saved_proxy = NULL; } LinphoneProxyConfigAddressComparisonResult linphone_proxy_config_address_equal(const LinphoneAddress *a, const LinphoneAddress *b) { @@ -59,17 +60,16 @@ LinphoneProxyConfigAddressComparisonResult linphone_proxy_config_address_equal(c return LinphoneProxyConfigAddressDifferent; /*either username, domain or port ar not equals*/ } -LinphoneProxyConfigAddressComparisonResult linphone_proxy_config_is_server_config_changed(const LinphoneProxyConfig* obj) { - LinphoneAddress *current_identity=obj->reg_identity?linphone_address_new(obj->reg_identity):NULL; - LinphoneAddress *current_proxy=obj->reg_proxy?linphone_address_new(obj->reg_proxy):NULL; +LinphoneProxyConfigAddressComparisonResult linphone_proxy_config_is_server_config_changed(const LinphoneProxyConfig* cfg) { + LinphoneAddress *current_proxy=cfg->reg_proxy?linphone_address_new(cfg->reg_proxy):NULL; LinphoneProxyConfigAddressComparisonResult result_identity; LinphoneProxyConfigAddressComparisonResult result; - result = linphone_proxy_config_address_equal(obj->saved_identity,current_identity); + result = linphone_proxy_config_address_equal(cfg->saved_identity,cfg->identity_address); if (result == LinphoneProxyConfigAddressDifferent) goto end; result_identity = result; - result = linphone_proxy_config_address_equal(obj->saved_proxy,current_proxy); + result = linphone_proxy_config_address_equal(cfg->saved_proxy,current_proxy); if (result == LinphoneProxyConfigAddressDifferent) goto end; /** If the proxies are equal use the result of the difference between the identities, * otherwise the result is weak-equal and so weak-equal must be returned even if the @@ -78,7 +78,6 @@ LinphoneProxyConfigAddressComparisonResult linphone_proxy_config_is_server_confi if (result == LinphoneProxyConfigAddressEqual) result = result_identity; end: - if (current_identity) linphone_address_destroy(current_identity); if (current_proxy) linphone_address_destroy(current_proxy); return result; } @@ -97,7 +96,7 @@ void linphone_proxy_config_write_all_to_config_file(LinphoneCore *lc){ lp_config_set_int(lc->config,"sip","default_proxy",linphone_core_get_default_proxy(lc,NULL)); } -static void linphone_proxy_config_init(LinphoneCore* lc, LinphoneProxyConfig *obj) { +static void linphone_proxy_config_init(LinphoneCore* lc, LinphoneProxyConfig *cfg) { const char *dial_prefix = lc ? lp_config_get_default_string(lc->config,"proxy","dial_prefix",NULL) : NULL; const char *identity = lc ? lp_config_get_default_string(lc->config, "proxy", "reg_identity", NULL) : NULL; const char *proxy = lc ? lp_config_get_default_string(lc->config, "proxy", "reg_proxy", NULL) : NULL; @@ -107,40 +106,31 @@ static void linphone_proxy_config_init(LinphoneCore* lc, LinphoneProxyConfig *ob const char *contact_params = lc ? lp_config_get_default_string(lc->config, "proxy", "contact_parameters", NULL) : NULL; const char *contact_uri_params = lc ? lp_config_get_default_string(lc->config, "proxy", "contact_uri_parameters", NULL) : NULL; - obj->expires = lc ? lp_config_get_default_int(lc->config, "proxy", "reg_expires", 3600) : 3600; - obj->reg_sendregister = lc ? lp_config_get_default_int(lc->config, "proxy", "reg_sendregister", 1) : 1; - obj->dial_prefix = dial_prefix ? ms_strdup(dial_prefix) : NULL; - obj->dial_escape_plus = lc ? lp_config_get_default_int(lc->config, "proxy", "dial_escape_plus", 0) : 0; - obj->privacy = lc ? lp_config_get_default_int(lc->config, "proxy", "privacy", LinphonePrivacyDefault) : LinphonePrivacyDefault; - obj->reg_identity = identity ? ms_strdup(identity) : NULL; - obj->reg_proxy = proxy ? ms_strdup(proxy) : NULL; - obj->reg_route = route ? ms_strdup(route) : NULL; - obj->domain = NULL; - obj->realm = realm ? ms_strdup(realm) : NULL; - obj->quality_reporting_enabled = lc ? lp_config_get_default_int(lc->config, "proxy", "quality_reporting_enabled", 0) : 0; - obj->quality_reporting_collector = quality_reporting_collector ? ms_strdup(quality_reporting_collector) : NULL; - obj->quality_reporting_interval = lc ? lp_config_get_default_int(lc->config, "proxy", "quality_reporting_interval", 0) : 0; - obj->contact_params = contact_params ? ms_strdup(contact_params) : NULL; - obj->contact_uri_params = contact_uri_params ? ms_strdup(contact_uri_params) : NULL; - obj->avpf_mode = lc ? lp_config_get_default_int(lc->config, "proxy", "avpf", LinphoneAVPFDefault) : LinphoneAVPFDefault; - obj->avpf_rr_interval = lc ? lp_config_get_default_int(lc->config, "proxy", "avpf_rr_interval", 5) : 5; - obj->publish_expires=-1; + cfg->expires = lc ? lp_config_get_default_int(lc->config, "proxy", "reg_expires", 3600) : 3600; + cfg->reg_sendregister = lc ? lp_config_get_default_int(lc->config, "proxy", "reg_sendregister", 1) : 1; + cfg->dial_prefix = dial_prefix ? ms_strdup(dial_prefix) : NULL; + cfg->dial_escape_plus = lc ? lp_config_get_default_int(lc->config, "proxy", "dial_escape_plus", 0) : 0; + cfg->privacy = lc ? lp_config_get_default_int(lc->config, "proxy", "privacy", LinphonePrivacyDefault) : LinphonePrivacyDefault; + cfg->identity_address = identity ? linphone_address_new(identity) : NULL; + cfg->reg_identity = cfg->identity_address ? linphone_address_as_string(cfg->identity_address) : NULL; + cfg->reg_proxy = proxy ? ms_strdup(proxy) : NULL; + cfg->reg_route = route ? ms_strdup(route) : NULL; + cfg->realm = realm ? ms_strdup(realm) : NULL; + cfg->quality_reporting_enabled = lc ? lp_config_get_default_int(lc->config, "proxy", "quality_reporting_enabled", 0) : 0; + cfg->quality_reporting_collector = quality_reporting_collector ? ms_strdup(quality_reporting_collector) : NULL; + cfg->quality_reporting_interval = lc ? lp_config_get_default_int(lc->config, "proxy", "quality_reporting_interval", 0) : 0; + cfg->contact_params = contact_params ? ms_strdup(contact_params) : NULL; + cfg->contact_uri_params = contact_uri_params ? ms_strdup(contact_uri_params) : NULL; + cfg->avpf_mode = lc ? lp_config_get_default_int(lc->config, "proxy", "avpf", LinphoneAVPFDefault) : LinphoneAVPFDefault; + cfg->avpf_rr_interval = lc ? lp_config_get_default_int(lc->config, "proxy", "avpf_rr_interval", 5) : 5; + cfg->publish_expires=-1; } -/** - * @addtogroup proxies - * @{ -**/ - -/** - * @deprecated, use #linphone_core_create_proxy_config instead - *Creates an empty proxy config. -**/ LinphoneProxyConfig *linphone_proxy_config_new() { return linphone_core_create_proxy_config(NULL); } -static void _linphone_proxy_config_destroy(LinphoneProxyConfig *obj); +static void _linphone_proxy_config_destroy(LinphoneProxyConfig *cfg); BELLE_SIP_DECLARE_NO_IMPLEMENTED_INTERFACES(LinphoneProxyConfig); @@ -152,47 +142,41 @@ BELLE_SIP_INSTANCIATE_VPTR(LinphoneProxyConfig, belle_sip_object_t, ); LinphoneProxyConfig * linphone_core_create_proxy_config(LinphoneCore *lc) { - LinphoneProxyConfig *obj = belle_sip_object_new(LinphoneProxyConfig); - linphone_proxy_config_init(lc,obj); - return obj; + LinphoneProxyConfig *cfg = belle_sip_object_new(LinphoneProxyConfig); + linphone_proxy_config_init(lc,cfg); + return cfg; } -void _linphone_proxy_config_release_ops(LinphoneProxyConfig *obj){ - if (obj->op) { - sal_op_release(obj->op); - obj->op=NULL; +void _linphone_proxy_config_release_ops(LinphoneProxyConfig *cfg){ + if (cfg->op) { + sal_op_release(cfg->op); + cfg->op=NULL; } - if (obj->publish_op){ - sal_op_release(obj->publish_op); - obj->publish_op=NULL; + if (cfg->publish_op){ + sal_op_release(cfg->publish_op); + cfg->publish_op=NULL; } } -void _linphone_proxy_config_destroy(LinphoneProxyConfig *obj){ - if (obj->reg_proxy!=NULL) ms_free(obj->reg_proxy); - if (obj->reg_identity!=NULL) ms_free(obj->reg_identity); - if (obj->reg_route!=NULL) ms_free(obj->reg_route); - if (obj->quality_reporting_collector!=NULL) ms_free(obj->quality_reporting_collector); - if (obj->ssctx!=NULL) sip_setup_context_free(obj->ssctx); - if (obj->domain!=NULL) ms_free(obj->domain); - if (obj->realm!=NULL) ms_free(obj->realm); - if (obj->type!=NULL) ms_free(obj->type); - if (obj->dial_prefix!=NULL) ms_free(obj->dial_prefix); - if (obj->contact_params) ms_free(obj->contact_params); - if (obj->contact_uri_params) ms_free(obj->contact_uri_params); - if (obj->saved_proxy!=NULL) linphone_address_destroy(obj->saved_proxy); - if (obj->saved_identity!=NULL) linphone_address_destroy(obj->saved_identity); - if (obj->sent_headers!=NULL) sal_custom_header_free(obj->sent_headers); - _linphone_proxy_config_release_ops(obj); +void _linphone_proxy_config_destroy(LinphoneProxyConfig *cfg){ + if (cfg->reg_proxy!=NULL) ms_free(cfg->reg_proxy); + if (cfg->reg_identity!=NULL) ms_free(cfg->reg_identity); + if (cfg->identity_address!=NULL) linphone_address_destroy(cfg->identity_address); + if (cfg->reg_route!=NULL) ms_free(cfg->reg_route); + if (cfg->quality_reporting_collector!=NULL) ms_free(cfg->quality_reporting_collector); + if (cfg->ssctx!=NULL) sip_setup_context_free(cfg->ssctx); + if (cfg->realm!=NULL) ms_free(cfg->realm); + if (cfg->type!=NULL) ms_free(cfg->type); + if (cfg->dial_prefix!=NULL) ms_free(cfg->dial_prefix); + if (cfg->contact_params) ms_free(cfg->contact_params); + if (cfg->contact_uri_params) ms_free(cfg->contact_uri_params); + if (cfg->saved_proxy!=NULL) linphone_address_destroy(cfg->saved_proxy); + if (cfg->saved_identity!=NULL) linphone_address_destroy(cfg->saved_identity); + if (cfg->sent_headers!=NULL) sal_custom_header_free(cfg->sent_headers); + if (cfg->pending_contact) linphone_address_unref(cfg->pending_contact); + _linphone_proxy_config_release_ops(cfg); } -/** - * Destroys a proxy config. - * @deprecated - * - * @note: LinphoneProxyConfig that have been removed from LinphoneCore with - * linphone_core_remove_proxy_config() must not be freed. -**/ void linphone_proxy_config_destroy(LinphoneProxyConfig *cfg) { belle_sip_object_unref(cfg); } @@ -211,28 +195,16 @@ void linphone_proxy_config_unref(LinphoneProxyConfig *cfg) { belle_sip_object_unref(cfg); } -/** - * Returns a boolean indicating that the user is sucessfully registered on the proxy. - * @deprecated Use linphone_proxy_config_get_state() instead. -**/ -bool_t linphone_proxy_config_is_registered(const LinphoneProxyConfig *obj){ - return obj->state == LinphoneRegistrationOk; +bool_t linphone_proxy_config_is_registered(const LinphoneProxyConfig *cfg){ + return cfg->state == LinphoneRegistrationOk; } -/** - * Sets the proxy address - * - * Examples of valid sip proxy address are: - * - IP address: sip:87.98.157.38 - * - IP address with port: sip:87.98.157.38:5062 - * - hostnames : sip:sip.example.net -**/ -int linphone_proxy_config_set_server_addr(LinphoneProxyConfig *obj, const char *server_addr){ +int linphone_proxy_config_set_server_addr(LinphoneProxyConfig *cfg, const char *server_addr){ LinphoneAddress *addr=NULL; char *modified=NULL; - if (obj->reg_proxy!=NULL) ms_free(obj->reg_proxy); - obj->reg_proxy=NULL; + if (cfg->reg_proxy!=NULL) ms_free(cfg->reg_proxy); + cfg->reg_proxy=NULL; if (server_addr!=NULL && strlen(server_addr)>0){ if (strstr(server_addr,"sip:")==NULL && strstr(server_addr,"sips:")==NULL){ @@ -243,7 +215,7 @@ int linphone_proxy_config_set_server_addr(LinphoneProxyConfig *obj, const char * if (addr==NULL) addr=linphone_address_new(server_addr); if (addr){ - obj->reg_proxy=linphone_address_as_string(addr); + cfg->reg_proxy=linphone_address_as_string(addr); linphone_address_destroy(addr); }else{ ms_warning("Could not parse %s",server_addr); @@ -253,43 +225,38 @@ int linphone_proxy_config_set_server_addr(LinphoneProxyConfig *obj, const char * return 0; } -/** - * Sets the user identity as a SIP address. - * - * This identity is normally formed with display name, username and domain, such - * as: - * Alice - * The REGISTER messages will have from and to set to this identity. - * -**/ -int linphone_proxy_config_set_identity(LinphoneProxyConfig *obj, const char *identity){ - LinphoneAddress *addr; + +int linphone_proxy_config_set_identity_address(LinphoneProxyConfig *cfg, const LinphoneAddress *addr){ + if (!addr || linphone_address_get_username(addr)==NULL){ + char* as_string = linphone_address_as_string(addr); + ms_warning("Invalid sip identity: %s", addr?as_string:"NULL"); + ms_free(as_string); + return -1; + } + if (cfg->identity_address != NULL) { + linphone_address_destroy(cfg->identity_address); + } + cfg->identity_address=linphone_address_clone(addr); + + if (cfg->reg_identity!=NULL) { + ms_free(cfg->reg_identity); + } + cfg->reg_identity= linphone_address_as_string(cfg->identity_address); + return 0; +} + +int linphone_proxy_config_set_identity(LinphoneProxyConfig *cfg, const char *identity){ if (identity!=NULL && strlen(identity)>0){ - addr=linphone_address_new(identity); - if (!addr || linphone_address_get_username(addr)==NULL){ - ms_warning("Invalid sip identity: %s",identity); - if (addr) - linphone_address_destroy(addr); - return -1; - }else{ - if (obj->reg_identity!=NULL) { - ms_free(obj->reg_identity); - obj->reg_identity=NULL; - } - obj->reg_identity=ms_strdup(identity); - if (obj->domain){ - ms_free(obj->domain); - } - obj->domain=ms_strdup(linphone_address_get_domain(addr)); - linphone_address_destroy(addr); - return 0; - } + LinphoneAddress *addr=linphone_address_new(identity); + int ret=linphone_proxy_config_set_identity_address(cfg, addr); + linphone_address_destroy(addr); + return ret; } return -1; } const char *linphone_proxy_config_get_domain(const LinphoneProxyConfig *cfg){ - return cfg->domain; + return cfg->identity_address ? linphone_address_get_domain(cfg->identity_address) : NULL; } /** @@ -297,11 +264,11 @@ const char *linphone_proxy_config_get_domain(const LinphoneProxyConfig *cfg){ * When a route is set, all outgoing calls will go to the route's destination if this proxy * is the default one (see linphone_core_set_default_proxy() ). **/ -int linphone_proxy_config_set_route(LinphoneProxyConfig *obj, const char *route) +int linphone_proxy_config_set_route(LinphoneProxyConfig *cfg, const char *route) { - if (obj->reg_route!=NULL){ - ms_free(obj->reg_route); - obj->reg_route=NULL; + if (cfg->reg_route!=NULL){ + ms_free(cfg->reg_route); + cfg->reg_route=NULL; } if (route!=NULL && route[0] !='\0'){ SalAddress *addr; @@ -317,19 +284,19 @@ int linphone_proxy_config_set_route(LinphoneProxyConfig *obj, const char *route) ms_free(tmp); tmp=NULL; } - obj->reg_route=tmp; + cfg->reg_route=tmp; } return 0; } -bool_t linphone_proxy_config_check(LinphoneCore *lc, LinphoneProxyConfig *obj){ - if (obj->reg_proxy==NULL){ +bool_t linphone_proxy_config_check(LinphoneCore *lc, LinphoneProxyConfig *cfg){ + if (cfg->reg_proxy==NULL){ if (lc) linphone_core_notify_display_warning(lc,_("The sip proxy address you entered is invalid, it must start with \"sip:\"" " followed by a hostname.")); return FALSE; } - if (obj->reg_identity==NULL){ + if (cfg->identity_address==NULL){ if (lc) linphone_core_notify_display_warning(lc,_("The sip identity you entered is invalid.\nIt should look like " "sip:username@proxydomain, such as sip:alice@example.net")); @@ -338,76 +305,68 @@ bool_t linphone_proxy_config_check(LinphoneCore *lc, LinphoneProxyConfig *obj){ return TRUE; } -/** - * Indicates whether a REGISTER request must be sent to the proxy. -**/ -void linphone_proxy_config_enableregister(LinphoneProxyConfig *obj, bool_t val){ - obj->reg_sendregister=val; +void linphone_proxy_config_enableregister(LinphoneProxyConfig *cfg, bool_t val){ + cfg->reg_sendregister=val; } -void linphone_proxy_config_set_expires(LinphoneProxyConfig *obj, int val){ +void linphone_proxy_config_set_expires(LinphoneProxyConfig *cfg, int val){ if (val<0) val=600; - obj->expires=val; + cfg->expires=val; } -void linphone_proxy_config_enable_publish(LinphoneProxyConfig *obj, bool_t val){ - obj->publish=val; +void linphone_proxy_config_enable_publish(LinphoneProxyConfig *cfg, bool_t val){ + cfg->publish=val; } -/** - * Prevent a proxy config from refreshing its registration. - * This is useful to let registrations to expire naturally (or) when the application wants to keep control on when - * refreshes are sent. - * However, linphone_core_set_network_reachable(lc,TRUE) will always request the proxy configs to refresh their registrations. - * The refreshing operations can be resumed with linphone_proxy_config_refresh_register(). - * @param obj the proxy config -**/ -void linphone_proxy_config_pause_register(LinphoneProxyConfig *obj){ - if (obj->op) sal_op_stop_refreshing(obj->op); +void linphone_proxy_config_pause_register(LinphoneProxyConfig *cfg){ + if (cfg->op) sal_op_stop_refreshing(cfg->op); } -/** - * Starts editing a proxy configuration. - * - * Because proxy configuration must be consistent, applications MUST - * call linphone_proxy_config_edit() before doing any attempts to modify - * proxy configuration (such as identity, proxy address and so on). - * Once the modifications are done, then the application must call - * linphone_proxy_config_done() to commit the changes. -**/ -void linphone_proxy_config_edit(LinphoneProxyConfig *obj){ - if (obj->publish && obj->publish_op){ - /*unpublish*/ - sal_publish_presence(obj->publish_op,NULL,NULL,0,(SalPresenceModel *)NULL); - sal_op_release(obj->publish_op); - obj->publish_op=NULL; +void linphone_proxy_config_edit(LinphoneProxyConfig *cfg){ + if (cfg->publish && cfg->publish_op){ + /*unpublish*/ + sal_publish_presence(cfg->publish_op,NULL,NULL,0,(SalPresenceModel *)NULL); + sal_op_release(cfg->publish_op); + cfg->publish_op=NULL; } /*store current config related to server location*/ - linphone_proxy_config_store_server_config(obj); + linphone_proxy_config_store_server_config(cfg); /*stop refresher in any case*/ - linphone_proxy_config_pause_register(obj); + linphone_proxy_config_pause_register(cfg); } -void linphone_proxy_config_apply(LinphoneProxyConfig *obj,LinphoneCore *lc){ - obj->lc=lc; - linphone_proxy_config_done(obj); +void linphone_proxy_config_apply(LinphoneProxyConfig *cfg,LinphoneCore *lc){ + cfg->lc=lc; + linphone_proxy_config_done(cfg); } -void linphone_proxy_config_stop_refreshing(LinphoneProxyConfig *obj){ - if (obj->publish_op){ - sal_op_release(obj->publish_op); - obj->publish_op=NULL; +void linphone_proxy_config_stop_refreshing(LinphoneProxyConfig * cfg){ + LinphoneAddress *contact_addr=NULL; + if ( cfg->op + && cfg->state == LinphoneRegistrationOk + && (contact_addr = (LinphoneAddress*)sal_op_get_contact_address(cfg->op)) + && linphone_address_get_transport(contact_addr) != LinphoneTransportUdp /*with udp, there is a risk of port reuse, so I prefer to not do anything for now*/) { + /*need to save current contact in order to reset is later*/ + linphone_address_ref(contact_addr); + if (cfg->pending_contact) + linphone_address_unref(cfg->pending_contact); + cfg->pending_contact=contact_addr; + } - if (obj->op){ - sal_op_release(obj->op); - obj->op=NULL; + if (cfg->publish_op){ + sal_op_release(cfg->publish_op); + cfg->publish_op=NULL; + } + if (cfg->op){ + sal_op_release(cfg->op); + cfg->op=NULL; } } -LinphoneAddress *guess_contact_for_register(LinphoneProxyConfig *obj){ +LinphoneAddress *guess_contact_for_register(LinphoneProxyConfig *cfg){ LinphoneAddress *ret=NULL; - LinphoneAddress *proxy=linphone_address_new(obj->reg_proxy); + LinphoneAddress *proxy=linphone_address_new(cfg->reg_proxy); const char *host; if (proxy==NULL) return NULL; @@ -415,22 +374,22 @@ LinphoneAddress *guess_contact_for_register(LinphoneProxyConfig *obj){ if (host!=NULL){ int localport = -1; const char *localip = NULL; - LinphoneAddress *contact=linphone_address_new(obj->reg_identity); + LinphoneAddress *contact=linphone_address_clone(cfg->identity_address); linphone_address_clean(contact); - if (obj->contact_params) { + if (cfg->contact_params) { // We want to add a list of contacts params to the linphone address - sal_address_set_params(contact,obj->contact_params); + sal_address_set_params(contact,cfg->contact_params); } - if (obj->contact_uri_params){ - sal_address_set_uri_params(contact,obj->contact_uri_params); + if (cfg->contact_uri_params){ + sal_address_set_uri_params(contact,cfg->contact_uri_params); } #ifdef BUILD_UPNP - if (obj->lc->upnp != NULL && linphone_core_get_firewall_policy(obj->lc)==LinphonePolicyUseUpnp && - linphone_upnp_context_get_state(obj->lc->upnp) == LinphoneUpnpStateOk) { - localip = linphone_upnp_context_get_external_ipaddress(obj->lc->upnp); - localport = linphone_upnp_context_get_external_port(obj->lc->upnp); + if (cfg->lc->upnp != NULL && linphone_core_get_firewall_policy(cfg->lc)==LinphonePolicyUseUpnp && + linphone_upnp_context_get_state(cfg->lc->upnp) == LinphoneUpnpStateOk) { + localip = linphone_upnp_context_get_external_ipaddress(cfg->lc->upnp); + localport = linphone_upnp_context_get_external_port(cfg->lc->upnp); } #endif //BUILD_UPNP linphone_address_set_port(contact,localport); @@ -443,73 +402,65 @@ LinphoneAddress *guess_contact_for_register(LinphoneProxyConfig *obj){ return ret; } -/** - * unregister without moving the register_enable flag - */ void _linphone_proxy_config_unregister(LinphoneProxyConfig *obj) { - if (obj->op && obj->state == LinphoneRegistrationOk) { + if (obj->op && (obj->state == LinphoneRegistrationOk || + (obj->state == LinphoneRegistrationProgress && obj->expires != 0))) { sal_unregister(obj->op); } } -static void linphone_proxy_config_register(LinphoneProxyConfig *obj){ - if (obj->reg_sendregister){ - LinphoneAddress* proxy=linphone_address_new(obj->reg_proxy); - LinphoneAddress* to=linphone_address_new(obj->reg_identity); +static void linphone_proxy_config_register(LinphoneProxyConfig *cfg){ + if (cfg->reg_sendregister){ + LinphoneAddress* proxy=linphone_address_new(cfg->reg_proxy); char* proxy_string; + char * from = linphone_address_as_string(cfg->identity_address); LinphoneAddress *contact; - ms_message("LinphoneProxyConfig [%p] about to register (LinphoneCore version: %s)",obj,linphone_core_get_version()); + ms_message("LinphoneProxyConfig [%p] about to register (LinphoneCore version: %s)",cfg,linphone_core_get_version()); proxy_string=linphone_address_as_string_uri_only(proxy); linphone_address_destroy(proxy); - if (obj->op) - sal_op_release(obj->op); - obj->op=sal_op_new(obj->lc->sal); + if (cfg->op) + sal_op_release(cfg->op); + cfg->op=sal_op_new(cfg->lc->sal); - linphone_configure_op(obj->lc, obj->op, to, obj->sent_headers, FALSE); - linphone_address_destroy(to); + linphone_configure_op(cfg->lc, cfg->op, cfg->identity_address, cfg->sent_headers, FALSE); - if ((contact=guess_contact_for_register(obj))) { - sal_op_set_contact_address(obj->op,contact); + if ((contact=guess_contact_for_register(cfg))) { + sal_op_set_contact_address(cfg->op,contact); linphone_address_destroy(contact); } - sal_op_set_user_pointer(obj->op,obj); + sal_op_set_user_pointer(cfg->op,cfg); - if (sal_register(obj->op,proxy_string,obj->reg_identity,obj->expires)==0) { - linphone_proxy_config_set_state(obj,LinphoneRegistrationProgress,"Registration in progress"); + if (sal_register(cfg->op,proxy_string, cfg->reg_identity, cfg->expires, cfg->pending_contact)==0) { + if (cfg->pending_contact) { + linphone_address_unref(cfg->pending_contact); + cfg->pending_contact=NULL; + } + linphone_proxy_config_set_state(cfg,LinphoneRegistrationProgress,"Registration in progress"); } else { - linphone_proxy_config_set_state(obj,LinphoneRegistrationFailed,"Registration failed"); + linphone_proxy_config_set_state(cfg,LinphoneRegistrationFailed,"Registration failed"); } ms_free(proxy_string); + ms_free(from); } else { /* unregister if registered*/ - if (obj->state == LinphoneRegistrationProgress) { - linphone_proxy_config_set_state(obj,LinphoneRegistrationCleared,"Registration cleared"); + if (cfg->state == LinphoneRegistrationProgress) { + linphone_proxy_config_set_state(cfg,LinphoneRegistrationCleared,"Registration cleared"); } - _linphone_proxy_config_unregister(obj); + _linphone_proxy_config_unregister(cfg); } } -/** - * Refresh a proxy registration. - * This is useful if for example you resuming from suspend, thus IP address may have changed. -**/ -void linphone_proxy_config_refresh_register(LinphoneProxyConfig *obj){ - if (obj->reg_sendregister && obj->op && obj->state!=LinphoneRegistrationProgress){ - if (sal_register_refresh(obj->op,obj->expires) == 0) { - linphone_proxy_config_set_state(obj,LinphoneRegistrationProgress, "Refresh registration"); +void linphone_proxy_config_refresh_register(LinphoneProxyConfig *cfg){ + if (cfg->reg_sendregister && cfg->op && cfg->state!=LinphoneRegistrationProgress){ + if (sal_register_refresh(cfg->op,cfg->expires) == 0) { + linphone_proxy_config_set_state(cfg,LinphoneRegistrationProgress, "Refresh registration"); } } } -/** - * Sets a dialing prefix to be automatically prepended when inviting a number with - * linphone_core_invite(); - * This dialing prefix shall usually be the country code of the country where the user is living, without "+". - * -**/ void linphone_proxy_config_set_dial_prefix(LinphoneProxyConfig *cfg, const char *prefix){ if (cfg->dial_prefix!=NULL){ ms_free(cfg->dial_prefix); @@ -518,29 +469,14 @@ void linphone_proxy_config_set_dial_prefix(LinphoneProxyConfig *cfg, const char if (prefix && prefix[0]!='\0') cfg->dial_prefix=ms_strdup(prefix); } -/** - * Returns dialing prefix. - * - * -**/ const char *linphone_proxy_config_get_dial_prefix(const LinphoneProxyConfig *cfg){ return cfg->dial_prefix; } -/** - * Sets whether liblinphone should replace "+" by international calling prefix in dialed numbers (passed to - * #linphone_core_invite ). - * -**/ void linphone_proxy_config_set_dial_escape_plus(LinphoneProxyConfig *cfg, bool_t val){ cfg->dial_escape_plus=val; } -/** - * Returns whether liblinphone should replace "+" by "00" in dialed numbers (passed to - * #linphone_core_invite ). - * -**/ bool_t linphone_proxy_config_get_dial_escape_plus(const LinphoneProxyConfig *cfg){ return cfg->dial_escape_plus; } @@ -597,8 +533,6 @@ typedef struct dial_plan{ }dial_plan_t; -/* TODO: fill with information for all countries over the world*/ - static dial_plan_t const dial_plans[]={ //Country , iso country code, e164 country calling code, number length, international usual prefix {"Afghanistan" ,"AF" , "93" , 9 , "00" }, @@ -884,10 +818,10 @@ bool_t linphone_proxy_config_is_phone_number(LinphoneProxyConfig *proxy, const c const char *p; for(p=username;*p!='\0';++p){ if (isdigit(*p) || - *p==' ' || - *p=='.' || - *p=='-' || - *p==')' || + *p==' ' || + *p=='.' || + *p=='-' || + *p==')' || *p=='(' || *p=='/' || *p=='+' || @@ -938,33 +872,40 @@ static void replace_icp_with_plus(const char *src, char *dest, size_t destlen, c strncpy(dest+i, src+strlen(icp), destlen-i-1); } +static char* replace_plus_with_icp_new(char *phone, const char* icp){ + return (icp && phone[0]=='+') ? ms_strdup_printf("%s%s", icp, phone+1) : ms_strdup(phone); +} -bool_t linphone_proxy_config_normalize_number(LinphoneProxyConfig *inproxy, const char *username, char *result, size_t result_len){ +static char* replace_icp_with_plus_new(char *phone, const char *icp){ + return (strstr(phone, icp) == phone) ? ms_strdup_printf("+%s", phone+strlen(icp)) : ms_strdup(phone); +} + +bool_t linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const char *username, char *result, size_t result_len){ bool_t ret; - LinphoneProxyConfig *proxy = inproxy ? inproxy : linphone_proxy_config_new(); + LinphoneProxyConfig *tmpproxy = proxy ? proxy : linphone_proxy_config_new(); memset(result, 0, result_len); - if (linphone_proxy_config_is_phone_number(proxy, username)){ + if (linphone_proxy_config_is_phone_number(tmpproxy, username)){ dial_plan_t dialplan = {0}; char *flatten=flatten_number(username); ms_debug("Flattened number is '%s'",flatten); - /*username does not contain a dial prefix nor the proxy, nothing else to do*/ - if (proxy->dial_prefix==NULL || proxy->dial_prefix[0]=='\0'){ + /*username does not contain a dial prefix nor the tmpproxy, nothing else to do*/ + if (tmpproxy->dial_prefix==NULL || tmpproxy->dial_prefix[0]=='\0'){ strncpy(result,flatten,result_len-1); } else { - lookup_dial_plan_by_ccc(proxy->dial_prefix,&dialplan); + lookup_dial_plan_by_ccc(tmpproxy->dial_prefix,&dialplan); ms_debug("Using dial plan '%s'",dialplan.country); /* the number has international prefix or +, so nothing to do*/ if (flatten[0]=='+'){ ms_debug("Prefix already present."); /*eventually replace the plus by the international calling prefix of the country*/ - if (proxy->dial_escape_plus) { + if (tmpproxy->dial_escape_plus) { replace_plus_with_icp(flatten,result,result_len,dialplan.icp); }else{ strncpy(result, flatten, result_len-1); } }else if (strstr(flatten,dialplan.icp)==flatten){ - if (proxy->dial_escape_plus){ + if (tmpproxy->dial_escape_plus){ strncpy(result, flatten, result_len-1); }else{ replace_icp_with_plus(flatten, result, result_len, dialplan.icp); @@ -978,7 +919,7 @@ bool_t linphone_proxy_config_normalize_number(LinphoneProxyConfig *inproxy, cons skip=numlen-dialplan.nnl; if (skip<0) skip=0; /*first prepend international calling prefix or +*/ - if (proxy->dial_escape_plus){ + if (tmpproxy->dial_escape_plus){ strncpy(result,dialplan.icp,result_len); i+=strlen(dialplan.icp); }else{ @@ -994,42 +935,156 @@ bool_t linphone_proxy_config_normalize_number(LinphoneProxyConfig *inproxy, cons strncpy(result+i,flatten+skip,result_len-i-1); } } - ms_free(flatten); ret = TRUE; } else { strncpy(result,username,result_len-1); ret = FALSE; } - if (inproxy==NULL) ms_free(proxy); + if (proxy==NULL) ms_free(tmpproxy); return ret; } +char* linphone_proxy_config_normalize_phone_number(LinphoneProxyConfig *proxy, const char *username) { + LinphoneProxyConfig *tmpproxy = proxy ? proxy : linphone_proxy_config_new(); + char* result = NULL; + if (linphone_proxy_config_is_phone_number(tmpproxy, username)){ + dial_plan_t dialplan = {0}; + char * flatten=flatten_number(username); + ms_debug("Flattened number is '%s'",flatten); + + /*if proxy has a dial prefix, modify phonenumber accordingly*/ + if (tmpproxy->dial_prefix!=NULL && tmpproxy->dial_prefix[0]!='\0'){ + lookup_dial_plan_by_ccc(tmpproxy->dial_prefix,&dialplan); + ms_debug("Using dial plan '%s'",dialplan.country); + /* the number already starts with + or international prefix*/ + if (flatten[0]=='+'||strstr(flatten,dialplan.icp)==flatten){ + ms_debug("Prefix already present."); + if (tmpproxy->dial_escape_plus) { + result = replace_plus_with_icp_new(flatten,dialplan.icp); + } else { + result = replace_icp_with_plus_new(flatten,dialplan.icp); + } + }else{ + /*0. keep at most national number significant digits */ + char* flatten_start = flatten + MAX(0, strlen(flatten) - dialplan.nnl); + /*1. First prepend international calling prefix or +*/ + /*2. Second add prefix*/ + /*3. Finally add user digits */ + + result = ms_strdup_printf("%s%s%s" + , tmpproxy->dial_escape_plus ? dialplan.icp : "+" + , dialplan.ccc + , flatten_start); + } + } + if (result==NULL) { + result = flatten; + } else { + ms_free(flatten); + } + } + if (proxy==NULL) ms_free(tmpproxy); + return result; +} + +static LinphoneAddress* _linphone_core_destroy_addr_if_not_sip( LinphoneAddress* addr ){ + if( linphone_address_is_sip(addr) ) { + return addr; + } else { + linphone_address_destroy(addr); + return NULL; + } +} + +LinphoneAddress* linphone_proxy_config_normalize_sip_uri(LinphoneProxyConfig *proxy, const char *username) { + enum_lookup_res_t *enumres=NULL; + char *enum_domain=NULL; + char *tmpurl; + LinphoneAddress *uri; + + if (*username=='\0') return NULL; + + if (is_enum(username,&enum_domain)){ + if (proxy) { + linphone_core_notify_display_status(proxy->lc,_("Looking for telephone number destination...")); + } + if (enum_lookup(enum_domain,&enumres)<0){ + if (proxy) { + linphone_core_notify_display_status(proxy->lc,_("Could not resolve this number.")); + } + ms_free(enum_domain); + return NULL; + } + ms_free(enum_domain); + tmpurl=enumres->sip_address[0]; + uri=linphone_address_new(tmpurl); + enum_lookup_res_free(enumres); + return _linphone_core_destroy_addr_if_not_sip(uri); + } + /* check if we have a "sip:" or a "sips:" */ + if ( (strstr(username,"sip:")==NULL) && (strstr(username,"sips:")==NULL) ){ + /* this doesn't look like a true sip uri */ + if (strchr(username,'@')!=NULL){ + /* seems like sip: is missing !*/ + tmpurl=ms_strdup_printf("sip:%s",username); + uri=linphone_address_new(tmpurl); + ms_free(tmpurl); + if (uri){ + return _linphone_core_destroy_addr_if_not_sip(uri); + } + } + + if (proxy!=NULL){ + /* append the proxy domain suffix */ + LinphoneAddress *uri=linphone_address_clone(linphone_proxy_config_get_identity_address(proxy)); + if (uri==NULL){ + return NULL; + } else { + char normalized_username[128]; + linphone_address_set_display_name(uri,NULL); + linphone_proxy_config_normalize_number(proxy,username,normalized_username, + sizeof(normalized_username)); + linphone_address_set_username(uri,normalized_username); + return _linphone_core_destroy_addr_if_not_sip(uri); + } + } else { + return NULL; + } + } + uri=linphone_address_new(username); + if (uri!=NULL){ + return _linphone_core_destroy_addr_if_not_sip(uri); + } + + return NULL; +} + /** * Commits modification made to the proxy configuration. **/ -int linphone_proxy_config_done(LinphoneProxyConfig *obj) +int linphone_proxy_config_done(LinphoneProxyConfig *cfg) { LinphoneProxyConfigAddressComparisonResult res; - if (!linphone_proxy_config_check(obj->lc,obj)) + if (!linphone_proxy_config_check(cfg->lc,cfg)) return -1; /*check if server address as changed*/ - res = linphone_proxy_config_is_server_config_changed(obj); + res = linphone_proxy_config_is_server_config_changed(cfg); if (res != LinphoneProxyConfigAddressEqual) { /* server config has changed, need to unregister from previous first*/ - if (obj->op) { + if (cfg->op) { if (res == LinphoneProxyConfigAddressDifferent) { - _linphone_proxy_config_unregister(obj); + _linphone_proxy_config_unregister(cfg); } - sal_op_set_user_pointer(obj->op,NULL); /*we don't want to receive status for this un register*/ - sal_op_unref(obj->op); /*but we keep refresher to handle authentication if needed*/ - obj->op=NULL; + sal_op_set_user_pointer(cfg->op,NULL); /*we don't want to receive status for this un register*/ + sal_op_unref(cfg->op); /*but we keep refresher to handle authentication if needed*/ + cfg->op=NULL; } } - obj->commit=TRUE; - linphone_proxy_config_write_all_to_config_file(obj->lc); + cfg->commit=TRUE; + linphone_proxy_config_write_all_to_config_file(cfg->lc); return 0; } @@ -1050,19 +1105,14 @@ int linphone_proxy_config_send_publish(LinphoneProxyConfig *proxy, LinphonePrese if (proxy->state==LinphoneRegistrationOk || proxy->state==LinphoneRegistrationCleared){ if (proxy->publish_op==NULL){ - LinphoneAddress *to=linphone_address_new(linphone_proxy_config_get_identity(proxy)); + const LinphoneAddress *to=linphone_proxy_config_get_identity_address(proxy); proxy->publish_op=sal_op_new(proxy->lc->sal); linphone_configure_op(proxy->lc, proxy->publish_op, to, NULL, FALSE); - if (to!=NULL){ - linphone_address_destroy(to); - } if (lp_config_get_int(proxy->lc->config,"sip","publish_msg_with_contact",0)){ - SalAddress *addr=sal_address_new(linphone_proxy_config_get_identity(proxy)); - sal_op_set_contact_address(proxy->publish_op,addr); - sal_address_unref(addr); + sal_op_set_contact_address(proxy->publish_op,linphone_proxy_config_get_identity_address(proxy)); } } err=sal_publish_presence(proxy->publish_op @@ -1074,102 +1124,67 @@ int linphone_proxy_config_send_publish(LinphoneProxyConfig *proxy, LinphonePrese return err; } -/** - * Returns the route set for this proxy configuration. -**/ -const char *linphone_proxy_config_get_route(const LinphoneProxyConfig *obj){ - return obj->reg_route; +const char *linphone_proxy_config_get_route(const LinphoneProxyConfig *cfg){ + return cfg->reg_route; +} + +const LinphoneAddress *linphone_proxy_config_get_identity_address(const LinphoneProxyConfig *cfg){ + return cfg->identity_address; +} + +const char *linphone_proxy_config_get_identity(const LinphoneProxyConfig *cfg){ + return cfg->reg_identity; +} + +bool_t linphone_proxy_config_publish_enabled(const LinphoneProxyConfig *cfg){ + return cfg->publish; +} + +const char *linphone_proxy_config_get_server_addr(const LinphoneProxyConfig *cfg){ + return cfg->reg_proxy; } /** - * Returns the SIP identity that belongs to this proxy configuration. - * - * The SIP identity is a SIP address (Display Name ) + * @return the duration of registration. **/ -const char *linphone_proxy_config_get_identity(const LinphoneProxyConfig *obj){ - return obj->reg_identity; +int linphone_proxy_config_get_expires(const LinphoneProxyConfig *cfg){ + return cfg->expires; } -/** - * Returns TRUE if PUBLISH request is enabled for this proxy. -**/ -bool_t linphone_proxy_config_publish_enabled(const LinphoneProxyConfig *obj){ - return obj->publish; +bool_t linphone_proxy_config_register_enabled(const LinphoneProxyConfig *cfg){ + return cfg->reg_sendregister; } -/** - * Returns the proxy's SIP address. -**/ -const char *linphone_proxy_config_get_server_addr(const LinphoneProxyConfig *obj){ - return obj->reg_proxy; -} - -/** - * Returns the duration of registration. -**/ -int linphone_proxy_config_get_expires(const LinphoneProxyConfig *obj){ - return obj->expires; -} - -/** - * Returns TRUE if registration to the proxy is enabled. -**/ -bool_t linphone_proxy_config_register_enabled(const LinphoneProxyConfig *obj){ - return obj->reg_sendregister; -} - -/** - * Set optional contact parameters that will be added to the contact information sent in the registration. - * @param obj the proxy config object - * @param contact_params a string contaning the additional parameters in text form, like "myparam=something;myparam2=something_else" - * - * The main use case for this function is provide the proxy additional information regarding the user agent, like for example unique identifier or apple push id. - * As an example, the contact address in the SIP register sent will look like ;apple-push-id=43143-DFE23F-2323-FA2232. -**/ -void linphone_proxy_config_set_contact_parameters(LinphoneProxyConfig *obj, const char *contact_params){ - if (obj->contact_params) { - ms_free(obj->contact_params); - obj->contact_params=NULL; +void linphone_proxy_config_set_contact_parameters(LinphoneProxyConfig *cfg, const char *contact_params){ + if (cfg->contact_params) { + ms_free(cfg->contact_params); + cfg->contact_params=NULL; } if (contact_params){ - obj->contact_params=ms_strdup(contact_params); + cfg->contact_params=ms_strdup(contact_params); } } -/** - * Set optional contact parameters that will be added to the contact information sent in the registration, inside the URI. - * @param obj the proxy config object - * @param contact_uri_params a string containing the additional parameters in text form, like "myparam=something;myparam2=something_else" - * - * The main use case for this function is provide the proxy additional information regarding the user agent, like for example unique identifier or apple push id. - * As an example, the contact address in the SIP register sent will look like . -**/ -void linphone_proxy_config_set_contact_uri_parameters(LinphoneProxyConfig *obj, const char *contact_uri_params){ - if (obj->contact_uri_params) { - ms_free(obj->contact_uri_params); - obj->contact_uri_params=NULL; +void linphone_proxy_config_set_contact_uri_parameters(LinphoneProxyConfig *cfg, const char *contact_uri_params){ + if (cfg->contact_uri_params) { + ms_free(cfg->contact_uri_params); + cfg->contact_uri_params=NULL; } if (contact_uri_params){ - obj->contact_uri_params=ms_strdup(contact_uri_params); + cfg->contact_uri_params=ms_strdup(contact_uri_params); } } -/** - * Returns previously set contact parameters. -**/ -const char *linphone_proxy_config_get_contact_parameters(const LinphoneProxyConfig *obj){ - return obj->contact_params; +const char *linphone_proxy_config_get_contact_parameters(const LinphoneProxyConfig *cfg){ + return cfg->contact_params; } -/** - * Returns previously set contact URI parameters. -**/ -const char *linphone_proxy_config_get_contact_uri_parameters(const LinphoneProxyConfig *obj){ - return obj->contact_uri_params; +const char *linphone_proxy_config_get_contact_uri_parameters(const LinphoneProxyConfig *cfg){ + return cfg->contact_uri_params; } -struct _LinphoneCore * linphone_proxy_config_get_core(const LinphoneProxyConfig *obj){ - return obj->lc; +struct _LinphoneCore * linphone_proxy_config_get_core(const LinphoneProxyConfig *cfg){ + return cfg->lc; } const char *linphone_proxy_config_get_custom_header(LinphoneProxyConfig *cfg, const char *header_name){ @@ -1183,10 +1198,6 @@ void linphone_proxy_config_set_custom_header(LinphoneProxyConfig *cfg, const cha cfg->sent_headers=sal_custom_header_append(cfg->sent_headers, header_name, header_value); } -/** - * Add a proxy configuration. - * This will start registration on the proxy, if registration is enabled. -**/ int linphone_core_add_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *cfg){ if (!linphone_proxy_config_check(lc,cfg)) { return -1; @@ -1200,12 +1211,6 @@ int linphone_core_add_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *cfg){ return 0; } -/** - * Removes a proxy configuration. - * - * LinphoneCore will then automatically unregister and place the proxy configuration - * on a deleted list. For that reason, a removed proxy does NOT need to be freed. -**/ void linphone_core_remove_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *cfg){ /* check this proxy config is in the list before doing more*/ if (ms_list_find(lc->sip_conf.proxies,cfg)==NULL){ @@ -1249,15 +1254,6 @@ static int linphone_core_get_default_proxy_config_index(LinphoneCore *lc) { return pos; } -/** - * Sets the default proxy. - * - * This default proxy must be part of the list of already entered LinphoneProxyConfig. - * Toggling it as default will make LinphoneCore use the identity associated with - * the proxy configuration in all incoming and outgoing calls. - * @param[in] lc LinphoneCore object - * @param[in] config The proxy configuration to use as the default one. -**/ void linphone_core_set_default_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *config){ /* check if this proxy is in our list */ if (config!=NULL){ @@ -1277,20 +1273,11 @@ void linphone_core_set_default_proxy_index(LinphoneCore *lc, int index){ else linphone_core_set_default_proxy(lc,ms_list_nth_data(lc->sip_conf.proxies,index)); } -/** - * Returns the default proxy configuration, that is the one used to determine the current identity. - * @deprecated Use linphone_core_get_default_proxy_config() instead. -**/ int linphone_core_get_default_proxy(LinphoneCore *lc, LinphoneProxyConfig **config){ if (config!=NULL) *config=lc->default_proxy; return linphone_core_get_default_proxy_config_index(lc); } -/** - * Returns the default proxy configuration, that is the one used to determine the current identity. - * @param[in] lc LinphoneCore object - * @return The default proxy configuration. -**/ LinphoneProxyConfig * linphone_core_get_default_proxy_config(LinphoneCore *lc) { return lc->default_proxy; } @@ -1299,64 +1286,64 @@ const MSList *linphone_core_get_proxy_config_list(const LinphoneCore *lc){ return lc->sip_conf.proxies; } -void linphone_proxy_config_write_to_config_file(LpConfig *config, LinphoneProxyConfig *obj, int index) +void linphone_proxy_config_write_to_config_file(LpConfig *config, LinphoneProxyConfig *cfg, int index) { char key[50]; sprintf(key,"proxy_%i",index); lp_config_clean_section(config,key); - if (obj==NULL){ + if (cfg==NULL){ return; } - if (obj->type!=NULL){ - lp_config_set_string(config,key,"type",obj->type); + if (cfg->type!=NULL){ + lp_config_set_string(config,key,"type",cfg->type); } - if (obj->reg_proxy!=NULL){ - lp_config_set_string(config,key,"reg_proxy",obj->reg_proxy); + if (cfg->reg_proxy!=NULL){ + lp_config_set_string(config,key,"reg_proxy",cfg->reg_proxy); } - if (obj->reg_route!=NULL){ - lp_config_set_string(config,key,"reg_route",obj->reg_route); + if (cfg->reg_route!=NULL){ + lp_config_set_string(config,key,"reg_route",cfg->reg_route); } - if (obj->reg_identity!=NULL){ - lp_config_set_string(config,key,"reg_identity",obj->reg_identity); + if (cfg->reg_identity!=NULL){ + lp_config_set_string(config,key,"reg_identity",cfg->reg_identity); } - if (obj->realm!=NULL){ - lp_config_set_string(config,key,"realm",obj->realm); + if (cfg->realm!=NULL){ + lp_config_set_string(config,key,"realm",cfg->realm); } - if (obj->contact_params!=NULL){ - lp_config_set_string(config,key,"contact_parameters",obj->contact_params); + if (cfg->contact_params!=NULL){ + lp_config_set_string(config,key,"contact_parameters",cfg->contact_params); } - if (obj->contact_uri_params!=NULL){ - lp_config_set_string(config,key,"contact_uri_parameters",obj->contact_uri_params); + if (cfg->contact_uri_params!=NULL){ + lp_config_set_string(config,key,"contact_uri_parameters",cfg->contact_uri_params); } - if (obj->quality_reporting_collector!=NULL){ - lp_config_set_string(config,key,"quality_reporting_collector",obj->quality_reporting_collector); + if (cfg->quality_reporting_collector!=NULL){ + lp_config_set_string(config,key,"quality_reporting_collector",cfg->quality_reporting_collector); } - lp_config_set_int(config,key,"quality_reporting_enabled",obj->quality_reporting_enabled); - lp_config_set_int(config,key,"quality_reporting_interval",obj->quality_reporting_interval); - lp_config_set_int(config,key,"reg_expires",obj->expires); - lp_config_set_int(config,key,"reg_sendregister",obj->reg_sendregister); - lp_config_set_int(config,key,"publish",obj->publish); - lp_config_set_int(config, key, "avpf", obj->avpf_mode); - lp_config_set_int(config, key, "avpf_rr_interval", obj->avpf_rr_interval); - lp_config_set_int(config,key,"dial_escape_plus",obj->dial_escape_plus); - lp_config_set_string(config,key,"dial_prefix",obj->dial_prefix); - lp_config_set_int(config,key,"privacy",obj->privacy); + lp_config_set_int(config,key,"quality_reporting_enabled",cfg->quality_reporting_enabled); + lp_config_set_int(config,key,"quality_reporting_interval",cfg->quality_reporting_interval); + lp_config_set_int(config,key,"reg_expires",cfg->expires); + lp_config_set_int(config,key,"reg_sendregister",cfg->reg_sendregister); + lp_config_set_int(config,key,"publish",cfg->publish); + lp_config_set_int(config, key, "avpf", cfg->avpf_mode); + lp_config_set_int(config, key, "avpf_rr_interval", cfg->avpf_rr_interval); + lp_config_set_int(config,key,"dial_escape_plus",cfg->dial_escape_plus); + lp_config_set_string(config,key,"dial_prefix",cfg->dial_prefix); + lp_config_set_int(config,key,"privacy",cfg->privacy); } -#define CONFIGURE_STRING_VALUE(obj,config,key,param,param_name) \ +#define CONFIGURE_STRING_VALUE(cfg,config,key,param,param_name) \ {\ - char* default_value = linphone_proxy_config_get_##param(obj)?ms_strdup(linphone_proxy_config_get_##param(obj)):NULL;\ - linphone_proxy_config_set_##param(obj,lp_config_get_string(config,key,param_name,default_value)); \ + char* default_value = linphone_proxy_config_get_##param(cfg)?ms_strdup(linphone_proxy_config_get_##param(cfg)):NULL;\ + linphone_proxy_config_set_##param(cfg,lp_config_get_string(config,key,param_name,default_value)); \ if ( default_value) ms_free(default_value); \ } -#define CONFIGURE_BOOL_VALUE(obj,config,key,param,param_name) \ - linphone_proxy_config_enable_##param(obj,lp_config_get_int(config,key,param_name,linphone_proxy_config_##param##_enabled(obj))); +#define CONFIGURE_BOOL_VALUE(cfg,config,key,param,param_name) \ + linphone_proxy_config_enable_##param(cfg,lp_config_get_int(config,key,param_name,linphone_proxy_config_##param##_enabled(cfg))); -#define CONFIGURE_INT_VALUE(obj,config,key,param,param_name) \ - linphone_proxy_config_set_##param(obj,lp_config_get_int(config,key,param_name,linphone_proxy_config_get_##param(obj))); +#define CONFIGURE_INT_VALUE(cfg,config,key,param,param_name) \ + linphone_proxy_config_set_##param(cfg,lp_config_get_int(config,key,param_name,linphone_proxy_config_get_##param(cfg))); LinphoneProxyConfig *linphone_proxy_config_new_from_config_file(LinphoneCore* lc, int index) { @@ -1491,10 +1478,6 @@ SipSetupContext *linphone_proxy_config_get_sip_setup_context(LinphoneProxyConfig return cfg->ssctx; } -/** - * @} -**/ - void linphone_proxy_config_set_user_data(LinphoneProxyConfig *cfg, void *ud) { cfg->user_data = ud; } @@ -1592,16 +1575,15 @@ void linphone_proxy_config_set_privacy(LinphoneProxyConfig *params, LinphonePriv LinphonePrivacyMask linphone_proxy_config_get_privacy(const LinphoneProxyConfig *params) { return params->privacy; } -void linphone_proxy_config_set_publish_expires(LinphoneProxyConfig *obj, int expires) { - obj->publish_expires=expires; +void linphone_proxy_config_set_publish_expires(LinphoneProxyConfig *cfg, int expires) { + cfg->publish_expires=expires; } -int linphone_proxy_config_get_publish_expires(const LinphoneProxyConfig *obj) { - if (obj->publish_expires<0) { - return obj->expires; /*default value is same as register*/ +int linphone_proxy_config_get_publish_expires(const LinphoneProxyConfig *cfg) { + if (cfg->publish_expires<0) { + return cfg->expires; /*default value is same as register*/ } else { - return obj->publish_expires; + return cfg->publish_expires; } - } void linphone_proxy_config_enable_avpf(LinphoneProxyConfig *cfg, bool_t enable) { @@ -1632,6 +1614,6 @@ uint8_t linphone_proxy_config_get_avpf_rr_interval(const LinphoneProxyConfig *cf return cfg->avpf_rr_interval; } -char* linphone_proxy_config_get_contact(const LinphoneProxyConfig *cfg) { - return sal_op_get_public_uri(cfg->op); +const LinphoneAddress* linphone_proxy_config_get_contact(const LinphoneProxyConfig *cfg) { + return sal_op_get_contact_address(cfg->op); } diff --git a/coreapi/quality_reporting.c b/coreapi/quality_reporting.c index e7e828c4e..4df8a2e0e 100644 --- a/coreapi/quality_reporting.c +++ b/coreapi/quality_reporting.c @@ -481,7 +481,8 @@ void linphone_reporting_update_media_info(LinphoneCall * call, int stats_type) { reporting_session_report_t * report = call->log->reporting.reports[stats_type]; char * dialog_id; - if (!media_report_enabled(call, stats_type)) + // call->op might be already released if hanging up in state LinphoneCallOutgoingInit + if (!media_report_enabled(call, stats_type) || call->op == NULL) return; dialog_id = sal_op_get_dialog_id(call->op); diff --git a/gtk/chat.c b/gtk/chat.c index 5479b7330..2075a9fb7 100644 --- a/gtk/chat.c +++ b/gtk/chat.c @@ -143,12 +143,44 @@ static gboolean scroll_to_end(GtkTextView *w){ return FALSE; } +static gboolean word_starts_with(const GtkTextIter *word_start, const char *prefix) { + gboolean res; + gchar *schema = NULL; + GtkTextIter end = *word_start; + gtk_text_iter_forward_chars(&end, strlen(prefix)); + schema = gtk_text_iter_get_slice(word_start, &end); + res = ( g_strcmp0(schema, prefix) == 0 ); + g_free(schema); + return res; +} + +static gboolean is_space(gunichar ch, gpointer user_data) { + return g_unichar_isspace(ch); +} + +static void insert_link_tags(GtkTextBuffer *buffer, const GtkTextIter *begin, const GtkTextIter *end) { + GtkTextIter iter = *begin; + while(gtk_text_iter_compare(&iter, end) < 0) { + if(gtk_text_iter_starts_word(&iter) && ( + word_starts_with(&iter, "http://") || + word_starts_with(&iter, "https://") || + word_starts_with(&iter, "ftp://") || + word_starts_with(&iter, "ftps://"))) { + GtkTextIter uri_begin = iter; + if(gtk_text_iter_forward_find_char(&iter, is_space, NULL, end)) { + gtk_text_buffer_apply_tag_by_name(buffer, "link", &uri_begin, &iter); + } + } + gtk_text_iter_forward_char(&iter); + } +} + void linphone_gtk_push_text(GtkWidget *w, const LinphoneAddress *from, gboolean me,LinphoneChatRoom *cr,LinphoneChatMessage *msg, gboolean hist){ GtkTextView *text=GTK_TEXT_VIEW(linphone_gtk_get_widget(w,"textview")); GtkTextBuffer *buffer=gtk_text_view_get_buffer(text); - GtkTextIter iter,begin; - int off; + GtkTextIter iter, link_start; + GtkTextMark *link_start_mark = NULL; char *from_str=linphone_address_as_string_uri_only(from); gchar *from_message=(gchar *)g_object_get_data(G_OBJECT(w),"from_message"); GHashTable *table=(GHashTable*)g_object_get_data(G_OBJECT(w),"table"); @@ -159,40 +191,35 @@ void linphone_gtk_push_text(GtkWidget *w, const LinphoneAddress *from, int tnow_day; int tnow_year; - gtk_text_buffer_get_start_iter(buffer,&begin); - gtk_text_buffer_get_end_iter(buffer,&iter); - off=gtk_text_iter_get_offset(&iter); + gtk_text_buffer_get_end_iter(buffer, &iter); if(g_strcmp0(from_message,from_str)!=0){ - gtk_text_buffer_get_iter_at_offset(buffer,&iter,off); - gtk_text_buffer_get_end_iter(buffer,&iter); gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, get_display_name(from), -1, - "bold", me ? "bg" : NULL, me ? "font_black" : NULL, NULL); - gtk_text_buffer_get_end_iter(buffer,&iter); + "from", me ? "me" : NULL, NULL); gtk_text_buffer_insert_with_tags_by_name(buffer,&iter, " : ", -1, - "bold", me ? "bg" : NULL, me ? "font_black" : NULL, NULL); - gtk_text_buffer_get_end_iter(buffer,&iter); + "from", me ? "me" : NULL, NULL); gtk_text_buffer_insert(buffer,&iter,"\n",-1); g_free(from_message); g_object_set_data(G_OBJECT(w),"from_message",g_strdup(from_str)); + ms_free(from_str); } - gtk_text_buffer_get_end_iter(buffer,&iter); + + link_start_mark = gtk_text_buffer_create_mark(buffer, NULL, &iter, TRUE); gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, linphone_chat_message_get_text(msg), -1, - "margin", me ? "bg" : NULL, me ? "font_black" : NULL, NULL); - gtk_text_buffer_get_end_iter(buffer,&iter); + "body", me ? "me" : NULL, NULL); gtk_text_buffer_insert(buffer,&iter,"\n",-1); - gtk_text_buffer_get_end_iter(buffer,&iter); + gtk_text_buffer_get_iter_at_mark(buffer, &link_start, link_start_mark); + insert_link_tags(buffer, &link_start, &iter); + gtk_text_buffer_delete_mark(buffer, link_start_mark); + t=linphone_chat_message_get_time(msg); switch (linphone_chat_message_get_state (msg)){ case LinphoneChatMessageStateInProgress: - { g_hash_table_insert(table,(gpointer)msg,GINT_TO_POINTER(gtk_text_iter_get_line(&iter))); gtk_text_buffer_insert_with_tags_by_name(buffer,&iter,"Sending ..",-1, - "right","small","italic","font_grey","bg",NULL); + "status", me ? "me" : NULL, NULL); g_object_set_data(G_OBJECT(w),"table",table); break; - } case LinphoneChatMessageStateDelivered: - { tnow=time(NULL); tm=localtime(&tnow); tnow_day=tm->tm_yday; @@ -204,28 +231,17 @@ void linphone_gtk_push_text(GtkWidget *w, const LinphoneAddress *from, strftime(buf,80,"%H:%M",tm); } gtk_text_buffer_insert_with_tags_by_name(buffer,&iter,buf,-1, - "right","small","italic","font_grey",me ? "bg":NULL,NULL); + "status", me ? "me" : NULL, NULL); break; - } case LinphoneChatMessageStateNotDelivered: - gtk_text_buffer_insert_with_tags_by_name(buffer,&iter,"Message not sent",-1, - "right","small","italic","font_grey",me ? "bg":NULL,NULL); - break; + gtk_text_buffer_insert_with_tags_by_name(buffer,&iter,"Message not sent",-1, + "status", me ? "me" : NULL, NULL); + break; default : gtk_text_buffer_insert_with_tags_by_name(buffer,&iter,"Sending ..",-1, - "right","small","italic","font_grey",me ? "bg":NULL,NULL); + "status", me ? "me" : NULL, NULL); } - gtk_text_buffer_get_end_iter(buffer,&iter); gtk_text_buffer_insert(buffer,&iter,"\n",-1); g_idle_add((GSourceFunc)scroll_to_end,text); - ms_free(from_str); -} - -const LinphoneAddress* linphone_gtk_get_used_identity(){ - LinphoneCore *lc=linphone_gtk_get_core(); - LinphoneProxyConfig *cfg; - linphone_core_get_default_proxy(lc,&cfg); - if (cfg) return linphone_address_new(linphone_proxy_config_get_identity(cfg)); - else return linphone_core_get_primary_contact_parsed(lc); } void update_chat_state_message(LinphoneChatMessageState state,LinphoneChatMessage *msg){ @@ -278,7 +294,7 @@ void update_chat_state_message(LinphoneChatMessageState state,LinphoneChatMessag default : result="Sending .."; } gtk_text_buffer_insert_with_tags_by_name(b,&iter,result,-1, - "right","small","italic","font_grey","bg",NULL); + "status", "me", NULL); g_object_set_data(G_OBJECT(page),"table",table); } } @@ -375,6 +391,95 @@ static void linphone_gtk_chat_add_contact(const LinphoneAddress *addr){ linphone_gtk_show_friends(); } +static GdkColor *_linphone_gtk_chatroom_get_link_color(GtkWidget *chatview) { + GValue color_value = {0}; + g_value_init(&color_value, GDK_TYPE_COLOR); + gtk_style_get_style_property( + gtk_widget_get_style(chatview), + G_OBJECT_TYPE(chatview), + "link-color", &color_value); + + return (GdkColor *)g_value_get_boxed(&color_value); +} + +static gboolean link_event_handler(GtkTextTag *tag, GObject *text_view,GdkEvent *event, GtkTextIter *iter, gpointer user_data) { + if(event->type == GDK_BUTTON_PRESS) { + GtkTextIter uri_begin = *iter; + GtkTextIter uri_end = *iter; + gchar *uri = NULL; + gtk_text_iter_backward_to_tag_toggle(&uri_begin, tag); + gtk_text_iter_forward_to_tag_toggle(&uri_end, tag); + uri = gtk_text_iter_get_slice(&uri_begin, &uri_end); + if(((GdkEventButton *)event)->button == 1) { + GError *error = NULL; + gtk_show_uri(NULL, uri, gdk_event_get_time(event), &error); + if(error) { + g_warning("Could not open %s from chat: %s", uri, error->message); + g_error_free(error); + } + } else if(((GdkEventButton *)event)->button == 3) { + GtkMenu *menu = GTK_MENU(g_object_get_data(text_view, "link_ctx_menu")); + g_object_set_data_full(G_OBJECT(menu), "uri", g_strdup(uri), g_free); + gtk_menu_popup(menu, NULL, NULL, NULL, NULL, 3, gdk_event_get_time(event)); + } + g_free(uri); + return TRUE; + } + return FALSE; +} + +static void chatroom_enable_hand_cursor(GdkWindow *window, gboolean hand_cursor_enabled) { +#if GTK_CHECK_VERSION(2,22,0) + GdkCursor *cursor = gdk_window_get_cursor(window); + GdkCursor *new_cursor = NULL; + if(!hand_cursor_enabled && gdk_cursor_get_cursor_type(cursor) != GDK_XTERM) { + new_cursor = gdk_cursor_new(GDK_XTERM); + } else if(hand_cursor_enabled && gdk_cursor_get_cursor_type(cursor) != GDK_HAND1) { + new_cursor = gdk_cursor_new(GDK_HAND1); + } + if(new_cursor) { + gdk_window_set_cursor(window, new_cursor); + gdk_cursor_unref(new_cursor); + } +#endif +} + +static gboolean chatroom_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { + gint wx, wy, bx, by; + GtkTextView *chatroom = GTK_TEXT_VIEW(widget); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(chatroom); + GtkTextTag *link_tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(buffer), "link"); + GdkWindow *window = gtk_text_view_get_window(chatroom, GTK_TEXT_WINDOW_TEXT); + GtkTextIter iter; + if(event->type == GDK_MOTION_NOTIFY) { + GdkEventMotion *motion_ev = (GdkEventMotion *)event; + wx = motion_ev->x; + wy = motion_ev->y; + gtk_text_view_window_to_buffer_coords(chatroom, GTK_TEXT_WINDOW_TEXT, wx, wy, &bx, &by); + gtk_text_view_get_iter_at_location(chatroom, &iter, bx, by); + if(gtk_text_iter_has_tag(&iter, link_tag)) { + chatroom_enable_hand_cursor(window, TRUE); + } else { + chatroom_enable_hand_cursor(window, FALSE); + } + } + return FALSE; +} + +static gboolean copy_uri_into_clipboard_handler(GtkMenuItem *menuitem, gpointer user_data) { + GtkWidget *menu = gtk_widget_get_parent(GTK_WIDGET(menuitem)); + const gchar *uri = (const gchar *)g_object_get_data(G_OBJECT(menu), "uri"); + GtkClipboard *clipboard = NULL; + GdkAtom clipboard_atom = gdk_atom_intern("CLIPBOARD", TRUE); + if(clipboard_atom == GDK_NONE) { + g_warning("Could not find CLIPBOARD atom"); + return FALSE; + } + clipboard = gtk_clipboard_get(clipboard_atom); + if(uri) gtk_clipboard_set_text(clipboard, uri, -1); + return FALSE; +} + GtkWidget* linphone_gtk_init_chatroom(LinphoneChatRoom *cr, const LinphoneAddress *with){ GtkWidget *chat_view=linphone_gtk_create_widget("main","chatroom_frame"); GtkWidget *main_window=linphone_gtk_get_main_window(); @@ -389,11 +494,11 @@ GtkWidget* linphone_gtk_init_chatroom(LinphoneChatRoom *cr, const LinphoneAddres MSList *messages; GHashTable *table; char *with_str; + GtkTextTag *tmp_tag; + GtkWidget *link_ctx_menu = gtk_menu_new(); + GtkWidget *link_ctx_menu_copy_item = gtk_menu_item_new_with_label(_("Copy")); with_str=linphone_address_as_string_uri_only(with); - gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text),GTK_WRAP_WORD_CHAR); - gtk_text_view_set_editable(GTK_TEXT_VIEW(text),FALSE); - gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(text),FALSE); gtk_notebook_append_page(notebook,chat_view,create_tab_chat_header(cr,with)); idx = gtk_notebook_page_num(notebook, chat_view); gtk_notebook_set_current_page(notebook, idx); @@ -402,24 +507,49 @@ GtkWidget* linphone_gtk_init_chatroom(LinphoneChatRoom *cr, const LinphoneAddres g_object_set_data(G_OBJECT(chat_view),"cr",cr); g_object_set_data(G_OBJECT(chat_view),"from_message",NULL); g_object_set_data(G_OBJECT(chat_view),"table",table); - gtk_text_buffer_create_tag(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), - "right","justification", GTK_JUSTIFY_RIGHT,NULL); - gtk_text_buffer_create_tag(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), - "left","justification", GTK_JUSTIFY_LEFT,NULL); - gtk_text_buffer_create_tag(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), - "bold","weight", PANGO_WEIGHT_BOLD,NULL); - gtk_text_buffer_create_tag(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), - "italic","style", PANGO_STYLE_ITALIC,NULL); - gtk_text_buffer_create_tag(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), - "small","size",9*PANGO_SCALE,NULL); - gtk_text_buffer_create_tag(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), - "font_grey","foreground-gdk",&color_grey,NULL); - gtk_text_buffer_create_tag(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), - "font_black","foreground-gdk",&color_black,NULL); - gtk_text_buffer_create_tag(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), - "margin","indent",10,NULL); - gtk_text_buffer_create_tag(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), - "bg","paragraph-background-gdk",&color_light_grey,NULL); + + gtk_text_buffer_create_tag( + gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), + "me", + "foreground_gdk", &color_black, + "paragraph-background-gdk", &color_light_grey, + NULL); + + gtk_text_buffer_create_tag( + gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), + "from", + "weight", PANGO_WEIGHT_BOLD, + NULL); + + gtk_text_buffer_create_tag( + gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), + "body", + "indent", 10, + NULL); + + gtk_text_buffer_create_tag( + gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), + "status", + "size-points", 9.0, + "foreground_gdk", &color_grey, + "style", PANGO_STYLE_ITALIC, + "justification", GTK_JUSTIFY_RIGHT, + NULL); + + tmp_tag = gtk_text_buffer_create_tag( + gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), + "link", + "underline", PANGO_UNDERLINE_SINGLE, + "foreground_gdk", _linphone_gtk_chatroom_get_link_color(chat_view), + NULL); + g_signal_connect(G_OBJECT(tmp_tag), "event", G_CALLBACK(link_event_handler), NULL); + g_signal_connect(G_OBJECT(text), "event", G_CALLBACK(chatroom_event), NULL); + gtk_menu_shell_append(GTK_MENU_SHELL(link_ctx_menu), link_ctx_menu_copy_item); + g_signal_connect(G_OBJECT(link_ctx_menu_copy_item), "activate", G_CALLBACK(copy_uri_into_clipboard_handler), NULL); + gtk_widget_show_all(link_ctx_menu); + g_object_set_data_full(G_OBJECT(text), "link_ctx_menu", link_ctx_menu, g_object_unref); + g_object_ref_sink(G_OBJECT(link_ctx_menu)); + messages = linphone_chat_room_get_history(cr,NB_MSG_HIST); display_history_message(chat_view,messages,with); button = linphone_gtk_get_widget(chat_view,"send"); diff --git a/gtk/incall_view.c b/gtk/incall_view.c index cb7d1ac0c..15b1396bb 100644 --- a/gtk/incall_view.c +++ b/gtk/incall_view.c @@ -371,7 +371,6 @@ void linphone_gtk_create_in_call_view(LinphoneCall *call){ GtkWidget *button; GtkWidget *image; - if (ms_list_size(linphone_core_get_calls(linphone_gtk_get_core()))==1){ /*this is the only call at this time */ call_index=1; @@ -634,22 +633,45 @@ void linphone_gtk_uninit_audio_meter(GtkWidget *w){ } } +typedef enum { VOLUME_CTRL_PLAYBACK, VOLUME_CTRL_RECORD } VolumeControlType; + +static void volume_control_value_changed(GtkScaleButton *button, gdouble value, gpointer user_data) { + LinphoneCall *call = (LinphoneCall *)g_object_get_data(G_OBJECT(button), "call"); + VolumeControlType type = (VolumeControlType)g_object_get_data(G_OBJECT(button), "type"); + + if(type == VOLUME_CTRL_PLAYBACK) { + linphone_call_set_speaker_volume_gain(call, value); + } else if(type == VOLUME_CTRL_RECORD) { + linphone_call_set_microphone_volume_gain(call, value); + } +} + +static void volume_control_init(GtkWidget *vol_ctrl, VolumeControlType type, LinphoneCall *call) { + g_object_set_data(G_OBJECT(vol_ctrl), "call", call); + g_object_set_data(G_OBJECT(vol_ctrl), "type", (gpointer)type); + + if(type == VOLUME_CTRL_PLAYBACK) { + gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_ctrl), linphone_call_get_speaker_volume_gain(call)); + } else if(type == VOLUME_CTRL_RECORD) { + gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_ctrl), linphone_call_get_microphone_volume_gain(call)); + } + + g_signal_connect(G_OBJECT(vol_ctrl), "value-changed", G_CALLBACK(volume_control_value_changed), NULL); +} + void linphone_gtk_in_call_view_enable_audio_view(LinphoneCall *call, gboolean val){ GtkWidget *callview=(GtkWidget*)linphone_call_get_user_pointer(call); GtkWidget *audio_view=linphone_gtk_get_widget(callview,"incall_audioview"); - GtkWidget *mic=linphone_gtk_get_widget(callview,"incall_mic_icon"); - GtkWidget *spk=linphone_gtk_get_widget(callview,"incall_spk_icon"); GtkWidget *mic_level=linphone_gtk_get_widget(callview,"mic_audiolevel"); GtkWidget *spk_level=linphone_gtk_get_widget(callview,"spk_audiolevel"); - GdkPixbuf *pbuf; + GtkWidget *spk_vol_ctrl = linphone_gtk_get_widget(callview, "incall_spk_vol_ctrl_button"); + GtkWidget *mic_vol_ctrl = linphone_gtk_get_widget(callview, "incall_mic_vol_ctrl_button"); - gtk_image_set_from_pixbuf(GTK_IMAGE(mic),(pbuf=create_pixbuf("mic_active.png"))); - g_object_unref(pbuf); if (val){ - gtk_image_set_from_pixbuf(GTK_IMAGE(spk),(pbuf=create_pixbuf("speaker.png"))); - g_object_unref(pbuf); linphone_gtk_init_audio_meter(mic_level,(get_volume_t)linphone_call_get_record_volume,call); linphone_gtk_init_audio_meter(spk_level,(get_volume_t)linphone_call_get_play_volume,call); + volume_control_init(spk_vol_ctrl, VOLUME_CTRL_PLAYBACK, call); + volume_control_init(mic_vol_ctrl, VOLUME_CTRL_RECORD, call); gtk_widget_show_all(audio_view); }else{ linphone_gtk_uninit_audio_meter(mic_level); @@ -709,8 +731,6 @@ char *linphone_gtk_address(const LinphoneAddress *addr){ return ms_strdup(displayname); } - - void linphone_gtk_in_call_view_set_in_call(LinphoneCall *call){ GtkWidget *callview=(GtkWidget*)linphone_call_get_user_pointer(call); GtkWidget *status=linphone_gtk_get_widget(callview,"in_call_status"); diff --git a/gtk/linphone.h b/gtk/linphone.h index b4bbf02c2..44f73a7f2 100644 --- a/gtk/linphone.h +++ b/gtk/linphone.h @@ -31,13 +31,25 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "ldap/ldapprovider.h" #ifdef ENABLE_NLS + +#ifdef _MSC_VER +// prevent libintl.h from re-defining fprintf and vfprintf +#ifndef fprintf +#define fprintf fprintf +#endif +#ifndef vfprintf +#define vfprintf vfprintf +#endif +#define _GL_STDIO_H +#endif + # include # undef _ # define _(String) dgettext (GETTEXT_PACKAGE,String) #else # define _(String) (String) # define ngettext(singular,plural,number) ((number>1) ? (plural) : (singular) ) -#endif +#endif // ENABLE_NLS #undef N_ #define N_(str) (str) @@ -95,7 +107,6 @@ LINPHONE_PUBLIC void linphone_gtk_close_assistant(void); LINPHONE_PUBLIC LinphoneCore *linphone_gtk_get_core(void); LINPHONE_PUBLIC GtkWidget *linphone_gtk_get_main_window(); LINPHONE_PUBLIC void linphone_gtk_display_something(GtkMessageType type, const gchar *message); -LINPHONE_PUBLIC void linphone_gtk_start_call(GtkWidget *button); LINPHONE_PUBLIC void linphone_gtk_call_terminated(); LINPHONE_PUBLIC void linphone_gtk_set_my_presence(LinphoneOnlineStatus ss); LINPHONE_PUBLIC void linphone_gtk_show_parameters(void); @@ -228,6 +239,7 @@ LINPHONE_PUBLIC void linphone_gtk_logout_clicked(void); LINPHONE_PUBLIC void linphone_gtk_about_response(GtkDialog *dialog, gint id); LINPHONE_PUBLIC void linphone_gtk_show_about(void); LINPHONE_PUBLIC void linphone_gtk_start_call(GtkWidget *w); +LINPHONE_PUBLIC void linphone_gtk_start_chat(GtkWidget *w); LINPHONE_PUBLIC void linphone_gtk_uri_bar_activate(GtkWidget *w); LINPHONE_PUBLIC void linphone_gtk_terminate_call(GtkWidget *button); LINPHONE_PUBLIC void linphone_gtk_decline_clicked(GtkWidget *button); diff --git a/gtk/loginframe.c b/gtk/loginframe.c index 727a746d1..cbe384c42 100644 --- a/gtk/loginframe.c +++ b/gtk/loginframe.c @@ -39,7 +39,7 @@ static gboolean do_login_noprompt(LinphoneProxyConfig *cfg){ linphone_gtk_show_login_frame(cfg,TRUE); return FALSE; } - addr=linphone_address_new(linphone_proxy_config_get_identity(cfg)); + addr=linphone_address_clone(linphone_proxy_config_get_identity_address(cfg)); linphone_address_set_username(addr,username); tmp=linphone_address_as_string (addr); do_login(ssctx,tmp,NULL,NULL); @@ -58,14 +58,14 @@ void linphone_gtk_show_login_frame(LinphoneProxyConfig *cfg, gboolean disable_au const char *passwd=NULL; const char *userid=NULL; gboolean auto_login=linphone_gtk_get_ui_config_int("automatic_login",0); - + if (auto_login && !disable_auto_login){ g_timeout_add(250,(GSourceFunc)do_login_noprompt,cfg); return; } gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(mw,"automatic_login")),auto_login); - + { const char *login_image=linphone_gtk_get_ui_config("login_image","linphone-banner.png"); if (login_image){ @@ -95,7 +95,7 @@ void linphone_gtk_show_login_frame(LinphoneProxyConfig *cfg, gboolean disable_au if (username) linphone_address_set_username(from,username); } - + ai=linphone_core_find_auth_info(lc,linphone_proxy_config_get_domain(cfg),linphone_address_get_username(from),NULL); /*display the last entered username, if not '?????'*/ if (linphone_address_get_username(from)[0]!='?') @@ -109,7 +109,7 @@ void linphone_gtk_show_login_frame(LinphoneProxyConfig *cfg, gboolean disable_au passwd!=NULL ? passwd : ""); gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_userid")), userid ? userid : ""); - + linphone_address_destroy(from); } @@ -150,7 +150,7 @@ void linphone_gtk_login_frame_connect_clicked(GtkWidget *button){ username=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_username"))); password=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_password"))); userid=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_userid"))); - + if (username==NULL || username[0]=='\0') return; diff --git a/gtk/main.c b/gtk/main.c index e936853f9..1c6e6c663 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -191,10 +191,10 @@ char *linphone_gtk_get_config_file(const char *filename){ #define FACTORY_CONFIG_FILE "linphonerc.factory" static char _factory_config_file[1024]; static const char *linphone_gtk_get_factory_config_file(){ + char* path = NULL; /*try accessing a local file first if exists*/ if (access(FACTORY_CONFIG_FILE,F_OK)==0){ - snprintf(_factory_config_file,sizeof(_factory_config_file), - "%s",FACTORY_CONFIG_FILE); + path = ms_strdup(FACTORY_CONFIG_FILE); } else { char *progdir; @@ -206,33 +206,31 @@ static const char *linphone_gtk_get_factory_config_file(){ if (basename != NULL) { basename ++; *basename = '\0'; - snprintf(_factory_config_file, sizeof(_factory_config_file), - "%s\\..\\%s", progdir, FACTORY_CONFIG_FILE); - } else { - if (workingdir!=NULL) { - snprintf(_factory_config_file, sizeof(_factory_config_file), - "%s\\%s", workingdir, FACTORY_CONFIG_FILE); - } else { - free(progdir); - return NULL; - } + path = ms_strdup_printf("%s\\..\\%s", progdir, FACTORY_CONFIG_FILE); + } else if (workingdir!=NULL) { + path = ms_strdup_printf("%s\\%s", workingdir, FACTORY_CONFIG_FILE); } #else basename = strrchr(progdir, '/'); if (basename != NULL) { basename ++; *basename = '\0'; - snprintf(_factory_config_file, sizeof(_factory_config_file), - "%s/../share/linphone/%s", progdir, FACTORY_CONFIG_FILE); - } else { - free(progdir); - return NULL; + path = ms_strdup_printf("%s/../share/linphone/%s", progdir, FACTORY_CONFIG_FILE); } #endif free(progdir); } } - return _factory_config_file; + if (path) { + //use factory file only if it exists + if (access(path,F_OK)==0){ + snprintf(_factory_config_file, sizeof(_factory_config_file), "%s", path); + ms_free(path); + return _factory_config_file; + } + ms_free(path); + } + return NULL; } LinphoneLDAPContactProvider* linphone_gtk_get_ldap(void){ @@ -306,7 +304,7 @@ static void linphone_gtk_init_liblinphone(const char *config_file, g_free(user_certificates_dir); linphone_core_enable_video_capture(the_core, TRUE); linphone_core_enable_video_display(the_core, TRUE); - linphone_core_set_native_video_window_id(the_core,-1);/*don't create the window*/ + linphone_core_set_native_video_window_id(the_core,LINPHONE_VIDEO_DISPLAY_NONE);/*don't create the window*/ if (no_video) { _linphone_gtk_enable_video(FALSE); linphone_gtk_set_ui_config_int("videoselfview",0); @@ -403,11 +401,11 @@ GtkWidget *linphone_gtk_create_window(const char *window_name, GtkWidget *parent gtk_builder_connect_signals(builder,w); linphone_gtk_configure_window(w,window_name); if(parent) { - gtk_window_set_modal(GTK_WINDOW(w), TRUE); +// gtk_window_set_modal(GTK_WINDOW(w), TRUE); gtk_window_set_transient_for(GTK_WINDOW(w), GTK_WINDOW(parent)); gtk_window_set_position(GTK_WINDOW(w), GTK_WIN_POS_CENTER_ON_PARENT); } else { - gtk_window_set_modal(GTK_WINDOW(w), FALSE); +// gtk_window_set_modal(GTK_WINDOW(w), FALSE); } return w; } @@ -484,16 +482,16 @@ void linphone_gtk_display_something(GtkMessageType type,const gchar *message){ /* draw a question box. link to dialog_click callback */ dialog = gtk_message_dialog_new ( GTK_WINDOW(main_window), - GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, - GTK_BUTTONS_YES_NO, - "%s", + GTK_BUTTONS_YES_NO, + "%s", (const gchar*)message); /* connect to some callback : REVISIT */ /* g_signal_connect_swapped (G_OBJECT (dialog), "response", - G_CALLBACK (dialog_click), - G_OBJECT (dialog)); + G_CALLBACK (dialog_click), + G_OBJECT (dialog)); */ /* actually show the box */ gtk_widget_show(dialog); @@ -501,15 +499,15 @@ void linphone_gtk_display_something(GtkMessageType type,const gchar *message){ else { dialog = gtk_message_dialog_new (GTK_WINDOW(main_window), - GTK_DIALOG_DESTROY_WITH_PARENT, - type, - GTK_BUTTONS_CLOSE, - "%s", - (const gchar*)message); + GTK_DIALOG_DESTROY_WITH_PARENT, + type, + GTK_BUTTONS_CLOSE, + "%s", + (const gchar*)message); /* Destroy the dialog when the user responds to it (e.g. clicks a button) */ g_signal_connect_swapped (G_OBJECT (dialog), "response", - G_CALLBACK (gtk_widget_destroy), - G_OBJECT (dialog)); + G_CALLBACK (gtk_widget_destroy), + G_OBJECT (dialog)); gtk_widget_show(dialog); } } @@ -531,7 +529,7 @@ void linphone_gtk_show_about(void){ GtkWidget *about; const char *tmp; GdkPixbuf *logo=create_pixbuf( - linphone_gtk_get_ui_config("logo","linphone-banner.png")); + linphone_gtk_get_ui_config("logo","linphone-banner.png")); static const char *defcfg="defcfg"; about=linphone_gtk_create_window("about", the_ui); @@ -829,7 +827,7 @@ void linphone_gtk_show_main_window(){ void linphone_gtk_call_terminated(LinphoneCall *call, const char *error){ GtkWidget *mw=linphone_gtk_get_main_window(); if (linphone_core_get_calls(linphone_gtk_get_core())==NULL){ - gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"start_call"),TRUE); + gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"start_call"),TRUE); } if (linphone_gtk_use_in_call_view() && call) linphone_gtk_in_call_view_terminate(call,error); @@ -840,31 +838,26 @@ static void linphone_gtk_update_call_buttons(LinphoneCall *call){ GtkWidget *mw=linphone_gtk_get_main_window(); const MSList *calls=linphone_core_get_calls(lc); GtkWidget *button; - bool_t start_active=TRUE; - //bool_t stop_active=FALSE; bool_t add_call=FALSE; int call_list_size=ms_list_size(calls); GtkWidget *conf_frame; - if (calls==NULL){ - start_active=TRUE; - //stop_active=FALSE; - }else{ - //stop_active=TRUE; - start_active=TRUE; + if (calls!=NULL){ add_call=TRUE; } button=linphone_gtk_get_widget(mw,"start_call"); - gtk_widget_set_sensitive(button,start_active); + gtk_widget_set_visible(button,!add_call); + + button=linphone_gtk_get_widget(mw,"start_chat"); gtk_widget_set_visible(button,!add_call); button=linphone_gtk_get_widget(mw,"add_call"); + gtk_widget_set_visible(button,add_call); if (linphone_core_sound_resources_locked(lc) || (call && linphone_call_get_state(call)==LinphoneCallIncomingReceived)) { gtk_widget_set_sensitive(button,FALSE); } else { - gtk_widget_set_sensitive(button,start_active); + gtk_widget_set_sensitive(button,TRUE); } - gtk_widget_set_visible(button,add_call); //gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"terminate_call"),stop_active); conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(mw),"conf_frame"); @@ -981,6 +974,18 @@ void linphone_gtk_start_call(GtkWidget *w){ } +void linphone_gtk_start_chat(GtkWidget *w){ + GtkWidget *mw=gtk_widget_get_toplevel(w); + GtkWidget *uri_bar=linphone_gtk_get_widget(mw,"uribar"); + const char *entered=gtk_entry_get_text(GTK_ENTRY(uri_bar)); + LinphoneCore *lc=linphone_gtk_get_core(); + LinphoneAddress *addr=linphone_core_interpret_url(lc,entered); + if (addr) { + linphone_gtk_friend_list_set_chat_conversation(addr); + linphone_address_destroy(addr); + } +} + void linphone_gtk_uri_bar_activate(GtkWidget *w){ linphone_gtk_start_call(w); } @@ -1075,13 +1080,13 @@ static void linphone_gtk_new_unknown_subscriber(LinphoneCore *lc, LinphoneFriend return; } - message=g_strdup_printf(_("%s would like to add you to his contact list.\nWould you allow him to see your presence status or add him to your contact list ?\nIf you answer no, this person will be temporarily blacklisted."),url); + message=g_strdup_printf(_("%s would like to add you to his/her contact list.\nWould you add him/her to your contact list and allow him/her to see your presence status?\nIf you answer no, this person will be temporarily blacklisted."),url); dialog = gtk_message_dialog_new ( GTK_WINDOW(linphone_gtk_get_main_window()), - GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, - GTK_BUTTONS_YES_NO, - "%s", + GTK_BUTTONS_YES_NO, + "%s", message); g_free(message); g_signal_connect(G_OBJECT (dialog), "response", @@ -1346,7 +1351,7 @@ static void linphone_gtk_call_updated_by_remote(LinphoneCall *call){ gboolean video_requested=linphone_call_params_video_enabled(rparams); gboolean video_used=linphone_call_params_video_enabled(current_params); g_message("Video used=%i, video requested=%i, automatically_accept=%i", - video_used,video_requested,pol->automatically_accept); + video_used,video_requested,pol->automatically_accept); if (!video_used && video_requested && !pol->automatically_accept){ linphone_core_defer_call_update(lc,call); { @@ -1356,13 +1361,13 @@ static void linphone_gtk_call_updated_by_remote(LinphoneCall *call){ if (dname==NULL) dname=linphone_address_get_username(addr); if (dname==NULL) dname=linphone_address_get_domain(addr); dialog=gtk_message_dialog_new(GTK_WINDOW(linphone_gtk_get_main_window()), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_YES_NO, - _("%s proposed to start video. Do you accept ?"),dname); + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_YES_NO, + _("%s proposed to start video. Do you accept ?"),dname); g_object_set_data_full(G_OBJECT(dialog), "call", linphone_call_ref(call), (GDestroyNotify)linphone_call_unref); - g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(on_call_updated_response), NULL); - g_timeout_add(20000,(GSourceFunc)on_call_updated_timeout,dialog); + g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(on_call_updated_response), NULL); + g_timeout_add(20000,(GSourceFunc)on_call_updated_timeout,dialog); gtk_widget_show(dialog); } } @@ -1470,7 +1475,7 @@ static void update_registration_status(LinphoneProxyConfig *cfg, LinphoneRegistr } static void linphone_gtk_registration_state_changed(LinphoneCore *lc, LinphoneProxyConfig *cfg, - LinphoneRegistrationState rs, const char *msg){ + LinphoneRegistrationState rs, const char *msg){ switch (rs){ case LinphoneRegistrationOk: if (cfg){ @@ -1541,7 +1546,7 @@ static GtkWidget *create_icon_menu(){ #ifndef HAVE_GTK_OSX void linphone_gtk_save_main_window_position(GtkWindow* mw, GdkEvent *event, gpointer data){ - gtk_window_get_position(GTK_WINDOW(mw), &main_window_x, &main_window_y); + gtk_window_get_position(GTK_WINDOW(mw), &main_window_x, &main_window_y); } #endif @@ -1643,8 +1648,8 @@ void linphone_gtk_load_identities(void){ LinphoneProxyConfig *cfg=(LinphoneProxyConfig*)elem->data; gtk_list_store_append(store,&iter); gtk_list_store_set(store,&iter,0,linphone_proxy_config_get_identity(cfg),1, - linphone_proxy_config_is_registered(cfg) ? GTK_STOCK_YES : NULL, - 2,cfg,-1); + linphone_proxy_config_is_registered(cfg) ? GTK_STOCK_YES : NULL, + 2,cfg,-1); if (cfg==def) { def_index=i; } @@ -1707,6 +1712,7 @@ static void linphone_gtk_configure_main_window(){ static const char *home; static const char *start_call_icon; static const char *add_call_icon; + static const char *start_chat_icon; static const char *search_icon; static gboolean update_check_menu; static gboolean buttons_have_borders; @@ -1716,8 +1722,9 @@ static void linphone_gtk_configure_main_window(){ if (!config_loaded){ title=linphone_gtk_get_ui_config("title","Linphone"); home=linphone_gtk_get_ui_config("home","http://www.linphone.org"); - start_call_icon=linphone_gtk_get_ui_config("start_call_icon","startcall-green.png"); - add_call_icon=linphone_gtk_get_ui_config("add_call_icon","addcall-green.png"); + start_call_icon=linphone_gtk_get_ui_config("start_call_icon","call_start.png"); + add_call_icon=linphone_gtk_get_ui_config("add_call_icon","call_add.png"); + start_chat_icon=linphone_gtk_get_ui_config("start_chat_icon","chat_start.png"); search_icon=linphone_gtk_get_ui_config("directory_search_icon",NULL); update_check_menu=linphone_gtk_get_ui_config_int("update_check_menu",0); buttons_have_borders=linphone_gtk_get_ui_config_int("buttons_border",1); @@ -1730,16 +1737,22 @@ static void linphone_gtk_configure_main_window(){ } if (start_call_icon){ gtk_button_set_image(GTK_BUTTON(linphone_gtk_get_widget(w,"start_call")), - create_pixmap (start_call_icon)); + create_pixmap (start_call_icon)); if (!buttons_have_borders) gtk_button_set_relief(GTK_BUTTON(linphone_gtk_get_widget(w,"start_call")),GTK_RELIEF_NONE); } if (add_call_icon){ gtk_button_set_image(GTK_BUTTON(linphone_gtk_get_widget(w,"add_call")), - create_pixmap (add_call_icon)); + create_pixmap (add_call_icon)); if (!buttons_have_borders) gtk_button_set_relief(GTK_BUTTON(linphone_gtk_get_widget(w,"add_call")),GTK_RELIEF_NONE); } + if (start_chat_icon){ + gtk_button_set_image(GTK_BUTTON(linphone_gtk_get_widget(w,"start_chat")), + create_pixmap (start_chat_icon)); + if (!buttons_have_borders) + gtk_button_set_relief(GTK_BUTTON(linphone_gtk_get_widget(w,"start_chat")),GTK_RELIEF_NONE); + } if (search_icon){ GdkPixbuf *pbuf=create_pixbuf(search_icon); if(pbuf) { diff --git a/gtk/main.ui b/gtk/main.ui index 48e5a61d6..1c28c26f3 100644 --- a/gtk/main.ui +++ b/gtk/main.ui @@ -118,6 +118,9 @@ True True 4 + False + word-char + False @@ -399,67 +402,104 @@ + True False - True - + True False - gtk-missing-image - 1 + + + True + True + True + True + none + False + vertical + audio-volume-muted +audio-volume-high +audio-volume-low +audio-volume-medium + + + False + False + 5 + 0 + + + + + True + False + + + False + False + 5 + 1 + + - False + True False + 10 0 - - 90 - 10 + True False + + + True + True + True + True + Click here to set the speakers volume + none + False + vertical + audio-volume-muted +audio-volume-high +audio-volume-low +audio-volume-medium + + + False + False + 5 + 0 + + + + + True + False + + + False + False + 5 + 1 + + - False + True False + 10 1 - - - True - False - gtk-missing-image - 0 - - - False - False - 2 - - - - - 90 - 10 - True - False - - - False - False - 1 - end - 3 - - False False - 2 + 5 3 @@ -1021,6 +1061,19 @@ 0 + + + True + True + True + + + + False + True + 1 + + True @@ -1032,8 +1085,7 @@ False False 6 - end - 1 + 2 @@ -1046,22 +1098,21 @@ False True - 6 - end - 2 + 3 - + True True True - + False - False - 3 + True + 4 + end diff --git a/gtk/status_icon.c b/gtk/status_icon.c index ad94d50ad..cbee89f54 100644 --- a/gtk/status_icon.c +++ b/gtk/status_icon.c @@ -117,7 +117,7 @@ static gboolean _linphone_status_icon_desc_is_supported( gboolean *result, LinphoneStatusIconDescIsSupportedResultCb cb, void *user_data) { - + return desc->is_supported(desc, result, cb, user_data); } @@ -131,7 +131,7 @@ static void _linphone_status_icon_desc_is_supported_result_cb( const _LinphoneStatusIconDesc *desc, gboolean result, _LinphoneStatusIconDescSearchCtx *ctx) { - + if(!result) { ctx->i = g_slist_next(ctx->i); for(; ctx->i; ctx->i = g_slist_next(ctx->i)) { @@ -140,12 +140,12 @@ static void _linphone_status_icon_desc_is_supported_result_cb( &result, (LinphoneStatusIconDescIsSupportedResultCb)_linphone_status_icon_desc_is_supported_result_cb, ctx)) { - + if(result) break; } else return; } } - + if(ctx->i) { const _LinphoneStatusIconDesc *desc = (const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0); ms_message("StatusIcon: found implementation: %s", desc->impl_name); @@ -153,7 +153,7 @@ static void _linphone_status_icon_desc_is_supported_result_cb( } else { g_warning("StatusIcon: no implementation found"); } - + g_free(ctx); } @@ -161,21 +161,21 @@ static gboolean _linphone_status_icon_find_first_available_impl( const _LinphoneStatusIconDesc **desc, LinphoneStatusIconDescFindResultCb cb, void *user_data) { - + gboolean result; _LinphoneStatusIconDescSearchCtx *ctx = g_new0(_LinphoneStatusIconDescSearchCtx, 1); ctx->cb = cb; ctx->user_data = user_data; - + ms_message("StatusIcon: looking for implementation..."); - + for(ctx->i=_linphone_status_icon_impls; ctx->i; ctx->i = g_slist_next(ctx->i)) { if(_linphone_status_icon_desc_is_supported( (const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0), &result, (LinphoneStatusIconDescIsSupportedResultCb)_linphone_status_icon_desc_is_supported_result_cb, ctx)) { - + if(result) { *desc = (const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0); ms_message("StatusIcon: found implementation: %s", (*desc)->impl_name); @@ -187,7 +187,7 @@ static gboolean _linphone_status_icon_find_first_available_impl( } g_warning("StatusIcon: no implementation found"); *desc = NULL; - + sync_return: g_free(ctx); return 1; @@ -266,15 +266,15 @@ void _linphone_status_icon_create_implementations_list(void) { gboolean linphone_status_icon_init(LinphoneStatusIconReadyCb ready_cb, void *user_data) { const _LinphoneStatusIconDesc *desc; void **ctx; - + ms_message("StatusIcon: Initialising"); - + _linphone_status_icon_create_implementations_list(); - + ctx = g_new(void *, 2); ctx[0] = ready_cb; ctx[1] = user_data; - + if(_linphone_status_icon_find_first_available_impl(&desc, _linphone_status_icon_init_cb, ctx)) { _linphone_status_icon_selected_desc = desc; g_free(ctx); @@ -317,7 +317,7 @@ static void _linphone_status_icon_impl_gtk_popup_menu(GtkStatusIcon *status_icon static void _linphone_status_icon_impl_gtk_init(LinphoneStatusIcon *si) { const char *icon_path=linphone_gtk_get_ui_config("icon",LINPHONE_ICON); - const char *call_icon_path=linphone_gtk_get_ui_config("start_call_icon","startcall-green.png"); + const char *call_icon_path=linphone_gtk_get_ui_config("start_call_icon","call_start.png"); GdkPixbuf *pbuf=create_pixbuf(icon_path); GtkStatusIcon *icon=gtk_status_icon_new_from_pixbuf(pbuf); g_signal_connect_swapped(G_OBJECT(icon),"activate", G_CALLBACK(_linphone_status_icon_impl_gtk_on_click_cb), si); @@ -375,7 +375,7 @@ static gboolean _linphone_status_icon_impl_is_supported( gboolean *result, LinphoneStatusIconDescIsSupportedResultCb cb, void *user_data) { - + *result = 1; return 1; } @@ -409,7 +409,7 @@ static gboolean _linphone_status_icon_impl_gtkosx_app_is_supported( gboolean *result, LinphoneStatusIconDescIsSupportedResultCb cb, void *user_data) { - + *result = 1; return 1; } @@ -472,10 +472,10 @@ static void _linphone_status_icon_impl_sn_start(LinphoneStatusIcon *si) { BcStatusNotifierParams *params; BcStatusNotifierToolTip *tooltip = bc_status_notifier_tool_tip_new("linphone", si->params->title, si->params->desc); BcStatusNotifierSignalsVTable vtable = {NULL}; - + vtable.activate_called_cb = _linphone_status_icon_impl_sn_activated_cb; vtable.context_menu_called_cb = _linphone_status_icon_impl_sn_menu_called_cb; - + params = bc_status_notifier_params_new(); bc_status_notifier_params_set_dbus_prefix(params, "org.kde"); bc_status_notifier_params_set_category(params, BcStatusNotifierCategoryCommunications); @@ -484,15 +484,15 @@ static void _linphone_status_icon_impl_sn_start(LinphoneStatusIcon *si) { bc_status_notifier_params_set_icon_name(params, "linphone"); bc_status_notifier_params_set_tool_tip(params, tooltip); bc_status_notifier_params_set_vtable(params, &vtable, si); - + bc_status_notifier_start(sn, params, NULL, NULL); - + bc_status_notifier_tool_tip_unref(tooltip); bc_status_notifier_params_unref(params); } static void _linphone_status_icon_impl_sn_enable_blinking(LinphoneStatusIcon *si, gboolean val) { - BcStatusNotifier *sn = (BcStatusNotifier *)si->data; + BcStatusNotifier *sn = (BcStatusNotifier *)si->data; if(val) { bc_status_notifier_update_status(sn, BcStatusNotifierStatusNeedsAttention); } else { @@ -513,16 +513,16 @@ static gboolean _linphone_status_icon_impl_sn_is_supported( gboolean *result, LinphoneStatusIconDescIsSupportedResultCb cb, void *user_data) { - + _LinphoneStatusIconDesc *desc2; void **data; const char *desktop = g_getenv("XDG_CURRENT_DESKTOP"); - + if(desktop == NULL || g_strcmp0(desktop, "KDE") != 0) { *result = FALSE; return TRUE; } - + desc2 = g_new(_LinphoneStatusIconDesc, 1); *desc2 = *desc; data = g_new(void *, 3); diff --git a/gtk/videowindow.c b/gtk/videowindow.c index f0a8b2e5b..ebc5f69a5 100644 --- a/gtk/videowindow.c +++ b/gtk/videowindow.c @@ -94,13 +94,13 @@ static gboolean drag_drop(GtkWidget *widget, GdkDragContext *drag_context, gint return TRUE; } -static unsigned long get_native_handle(GdkWindow *gdkw){ +static void *get_native_handle(GdkWindow *gdkw){ #ifdef GDK_WINDOWING_X11 - return (unsigned long)GDK_WINDOW_XID(gdkw); + return (void *)GDK_WINDOW_XID(gdkw); #elif defined(WIN32) - return (unsigned long)GDK_WINDOW_HWND(gdkw); + return (void *)GDK_WINDOW_HWND(gdkw); #elif defined(__APPLE__) - return (unsigned long)gdk_quartz_window_get_nsview(gdkw); + return (void *)gdk_quartz_window_get_nsview(gdkw); #endif g_warning("No way to get the native handle from gdk window"); return 0; @@ -132,7 +132,7 @@ static gint resize_video_window(LinphoneCall *call){ static void on_video_window_destroy(GtkWidget *w, guint timeout){ g_source_remove(timeout); - linphone_core_set_native_video_window_id(linphone_gtk_get_core(),(unsigned long)-1); + linphone_core_set_native_video_window_id(linphone_gtk_get_core(),LINPHONE_VIDEO_DISPLAY_NONE); } static void video_window_set_fullscreen(GtkWidget *w, gboolean val){ @@ -314,7 +314,7 @@ static void on_video_preview_destroyed(GtkWidget *video_preview, GtkWidget *mw){ guint timeout_id=GPOINTER_TO_INT(g_object_get_data(G_OBJECT(video_preview),"timeout-id")); g_object_set_data(G_OBJECT(mw),"video_preview",NULL); linphone_core_enable_video_preview(lc,FALSE); - linphone_core_set_native_preview_window_id(lc,-1); + linphone_core_set_native_preview_window_id(lc,(void *)(unsigned long)-1); g_source_remove(timeout_id); } diff --git a/include/sal/sal.h b/include/sal/sal.h index bceff451d..80f334835 100644 --- a/include/sal/sal.h +++ b/include/sal/sal.h @@ -704,7 +704,7 @@ LINPHONE_PUBLIC void sal_default_set_sdp_handling(Sal* h, SalOpSDPHandling handl LINPHONE_PUBLIC void sal_call_set_sdp_handling(SalOp *h, SalOpSDPHandling handling) ; /*Registration*/ -int sal_register(SalOp *op, const char *proxy, const char *from, int expires); +int sal_register(SalOp *op, const char *proxy, const char *from, int expires,SalAddress* old_contact); /*refresh a register, -1 mean use the last known value*/ int sal_register_refresh(SalOp *op, int expires); int sal_unregister(SalOp *h); @@ -800,6 +800,11 @@ LINPHONE_PUBLIC void sal_set_recv_error(Sal *sal,int value); /*always answer 480 if value=true*/ LINPHONE_PUBLIC void sal_enable_unconditional_answer(Sal *sal,int value); +LINPHONE_PUBLIC bool_t sal_pending_trans_checking_enabled(const Sal *sal) ; +LINPHONE_PUBLIC int sal_enable_pending_trans_checking(Sal *sal, bool_t value) ; + + + /*refresher retry after value in ms*/ LINPHONE_PUBLIC void sal_set_refresher_retry_after(Sal *sal,int value); LINPHONE_PUBLIC int sal_get_refresher_retry_after(const Sal *sal); diff --git a/mediastreamer2 b/mediastreamer2 index 7494e580b..c9e33c769 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 7494e580b6127b950f29a5dff731789ed605b3a6 +Subproject commit c9e33c769b2865f5dc8e2366d9f2060daa95b893 diff --git a/oRTP b/oRTP index d9377cb47..6ace4eed1 160000 --- a/oRTP +++ b/oRTP @@ -1 +1 @@ -Subproject commit d9377cb47177cd92d2a1971cd389221aeebcabde +Subproject commit 6ace4eed11a93209de13b39cade47a54d534e950 diff --git a/pixmaps/CMakeLists.txt b/pixmaps/CMakeLists.txt index 301a6a442..800869425 100644 --- a/pixmaps/CMakeLists.txt +++ b/pixmaps/CMakeLists.txt @@ -20,43 +20,7 @@ # ############################################################################ -set(PIXMAPS - active_chat.png - addcall-green.png - call.png - call_status_incoming.png - call_status_outgoing.png - chat_message_delivered.png - chat_message_inprogress.png - chat_message_not_delivered.png - chat.png - composing_active_chat.png - composing_chat.png - contact-orange.png - contact_starred.png - contact_unstarred.png - dialer-orange.png - dialer.png - history-orange.png - hold_off.png - hold_on.png - linphone-banner.png - linphone.icns - linphone.png - mic_active.png - mic_muted.png - notok.png - ok.png - speaker.png - startcall-green.png - startcall-small.png - status-green.png - status-offline.png - status-orange.png - status-red.png - stopcall-red.png - stopcall-small.png -) +file(GLOB PIXMAPS "*.png" "linphone.icns") install(FILES ${PIXMAPS} DESTINATION ${PACKAGE_DATA_DIR}/pixmaps/linphone diff --git a/pixmaps/Makefile.am b/pixmaps/Makefile.am index 10ad6856c..b0fb73d8a 100644 --- a/pixmaps/Makefile.am +++ b/pixmaps/Makefile.am @@ -9,10 +9,10 @@ pixmap_DATA= \ status-red.png \ status-offline.png \ call.png \ - chat.png active_chat.png composing_chat.png composing_active_chat.png\ + chat.png chat_start.png active_chat.png composing_chat.png composing_active_chat.png\ chat_message_inprogress.png chat_message_delivered.png chat_message_not_delivered.png\ - contact-orange.png dialer-orange.png history-orange.png\ - startcall-green.png startcall-small.png stopcall-red.png stopcall-small.png addcall-green.png linphone.icns \ + contact-orange.png history-orange.png\ + call_start.png startcall-small.png stopcall-red.png stopcall-small.png call_add.png linphone.icns \ contact_starred.png contact_unstarred.png \ speaker.png \ call_status_incoming.png call_status_outgoing.png \ diff --git a/pixmaps/addcall-green.png b/pixmaps/addcall-green.png deleted file mode 100644 index 9de8463ca..000000000 Binary files a/pixmaps/addcall-green.png and /dev/null differ diff --git a/pixmaps/call_add.png b/pixmaps/call_add.png new file mode 100644 index 000000000..9e2cbb18e Binary files /dev/null and b/pixmaps/call_add.png differ diff --git a/pixmaps/call_start.png b/pixmaps/call_start.png new file mode 100644 index 000000000..77b264d72 Binary files /dev/null and b/pixmaps/call_start.png differ diff --git a/pixmaps/chat_start.png b/pixmaps/chat_start.png new file mode 100644 index 000000000..3de673211 Binary files /dev/null and b/pixmaps/chat_start.png differ diff --git a/pixmaps/dialer-orange.png b/pixmaps/dialer-orange.png deleted file mode 100644 index 2d715eac0..000000000 Binary files a/pixmaps/dialer-orange.png and /dev/null differ diff --git a/pixmaps/dialer.png b/pixmaps/dialer.png index 5da3ad70d..bb9747a90 100644 Binary files a/pixmaps/dialer.png and b/pixmaps/dialer.png differ diff --git a/po/ar.po b/po/ar.po index be90313a7..e1e5e75a5 100644 --- a/po/ar.po +++ b/po/ar.po @@ -9,10 +9,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 14:12+0000\n" -"Last-Translator: محيي الدين \n" -"Language-Team: Arabic (http://www.transifex.com/projects/p/linphone-gtk/language/ar/)\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: Arabic (http://www.transifex.com/p/linphone-gtk/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -139,88 +139,88 @@ msgstr "ابدأ مرشد الصوت" msgid "Run self test and exit 0 if succeed" msgstr "شغِّل الاختبار الذاتي ثم اخرِجْ 0 إذا نجح" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "%s يريد إضافتك إلى جهة اتصاله.\nهل تريد السماح له برؤية معلومات حضورك وكذا إضافته إلى جهة اتصالك أيضا ؟ إذا أجبت بلا، سيُحظَر هذا الشخص مؤقتا." +msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "ادخل كلمة السر لـ %s\n في نطاق %s:" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "خطأ في المكالمة" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "إنتهت المكالمة" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "مكالمة واردة" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "أجِبْ" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "ارفضْ" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "المكالمة متوقفة" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "بواسطة %s" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "يود %s تشغيل الفيديو. هل تقبل ذلك ؟" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "وصلة إلى الموقع وِبْ" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "لِنْفُونْ" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "الهاتف المرئي عبر الإنترنت" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "%s (افتراضي)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "التحويل إلى %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "لا وجود للوحة الصوت على هذا الحاسوب.\nلن تتمكن من تلقي أو إجراء أي مكالمة." -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "هاتف SIP المرئي الحر" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "أهلا\n" @@ -304,75 +304,75 @@ msgstr "الحساب" #: ../gtk/propertybox.c:1161 msgid "English" -msgstr "الإنجليزية" +msgstr "English" #: ../gtk/propertybox.c:1162 msgid "French" -msgstr "الفرنسية" +msgstr "Français" #: ../gtk/propertybox.c:1163 msgid "Swedish" -msgstr "السويدية" +msgstr "Svenska" #: ../gtk/propertybox.c:1164 msgid "Italian" -msgstr "الإيطالية" +msgstr "Italiano" #: ../gtk/propertybox.c:1165 msgid "Spanish" -msgstr "الإسبانية" +msgstr "Español" #: ../gtk/propertybox.c:1166 msgid "Brazilian Portugese" -msgstr "البرتغالية البرازيلية" +msgstr "Português do Brasil" #: ../gtk/propertybox.c:1167 msgid "Polish" -msgstr "البولونية" +msgstr "Polski" #: ../gtk/propertybox.c:1168 msgid "German" -msgstr "الألمانية" +msgstr "Deutsch" #: ../gtk/propertybox.c:1169 msgid "Russian" -msgstr "الروسية" +msgstr "Русский" #: ../gtk/propertybox.c:1170 msgid "Japanese" -msgstr "اليابانية" +msgstr "日本語" #: ../gtk/propertybox.c:1171 msgid "Dutch" -msgstr "الهولندية" +msgstr "Nederlands" #: ../gtk/propertybox.c:1172 msgid "Hungarian" -msgstr "الهنغارية" +msgstr "Magyar" #: ../gtk/propertybox.c:1173 msgid "Czech" -msgstr "التشيكية" +msgstr "Čeština" #: ../gtk/propertybox.c:1174 msgid "Chinese" -msgstr "الصينية المبسَّطة" +msgstr "简体中文" #: ../gtk/propertybox.c:1175 msgid "Traditional Chinese" -msgstr "الصينية التقليدية" +msgstr "繁体中文" #: ../gtk/propertybox.c:1176 msgid "Norwegian" -msgstr "النرويجية" +msgstr "Norsk bokmål" #: ../gtk/propertybox.c:1177 msgid "Hebrew" -msgstr "العبرية" +msgstr "עברית" #: ../gtk/propertybox.c:1178 msgid "Serbian" -msgstr "الصربية" +msgstr "Српски" #: ../gtk/propertybox.c:1179 msgid "Arabic" @@ -380,7 +380,7 @@ msgstr "العربية" #: ../gtk/propertybox.c:1180 msgid "Turkish" -msgstr "التركية" +msgstr "Türkçe" #: ../gtk/propertybox.c:1237 msgid "" @@ -587,7 +587,7 @@ msgstr "التحقق من الحساب في تقدم" msgid "Error" msgstr "خطأ" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "في طور الإنهاء" @@ -793,101 +793,101 @@ msgstr "يجلب من %s" msgid "Downloading of remote configuration from %s failed." msgstr "فَشِل تنزيل التهيئة عن بعد من %s ." -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "لم يكتشف صوتاً" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "خافِت" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "جيد" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "صاخب" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "هل سمعت ثلاث رنات ؟" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "لم يعثر على تفضيلات الصوت" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "لم يتمكن من تشغيل التحكم في الصوت للنظام" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "مرحبا !\nسيمكنك هذا المرشد من تهيئة إعدادات الصوت من أجل لِنْفُونْ" -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "جهاز الالتقاط" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "الحجم المسجَّل" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "صامت" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "تفضيلات الصوت للنظام" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "جهاز السماع" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "شغِّل ثلاث رنَّات" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "اضغط على زر التسجيل وانطق ببعض الكلمات" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "استمع لصوتك المسجَّل" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "تسجيل" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "تشغيل" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "لنُشغِّل لِنْفُونْ الآن" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "مرشد الصوت" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "مرشد الصوت" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "معايرة كسب الميكروفون" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "معايرة شدة مكبر الصوت" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "سَجِّل واقرأ " @@ -1764,60 +1764,60 @@ msgstr "تجري التهيئة..." msgid "Please wait while fetching configuration from server..." msgstr "رجاءً انتظر ريثما ينتهي من جلب الإعدادات من الخادم..." -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "جاهز" -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "تجري التهيئة" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "يجري البحث عن وجهة رقم الهاتف..." -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "لم يتمكن من إيجاد هذا الرقم." #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "يتصل ب" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "لم يتمكن من الاتصال" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "آسف، وصل عدد المكالمات الآنية إلى حده الأقصى" -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "يتصل بك" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr "ويطلب ردا تلقائيا." -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "يجري تعديل إعدادات المكالمة..." -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "متصل." -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "أُلغيت المكالمة" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "لم يتمكن من توقيف المكالمة مؤقتا" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "وضع المكالمة قيد الانتظار..." @@ -1893,7 +1893,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "إن هوية SIP التي أدخلت غير صحيحة.\nيجب أن تكون بهذا النمط sip:username@proxydomain، مثلا sip:alice@example.net" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "تعذر الولوج بالهوية %s" @@ -2017,7 +2017,7 @@ msgstr "شارة التحقق من الهوية هي %s" msgid "Call parameters were successfully modified." msgstr "عُدِّلت معاملات المكالمات بنجاج." -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/cs.po b/po/cs.po index a5b611a29..9feeb6130 100644 --- a/po/cs.po +++ b/po/cs.po @@ -9,10 +9,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 13:49+0000\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" "Last-Translator: Belledonne Communications \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/linphone-gtk/language/cs/)\n" +"Language-Team: Czech (http://www.transifex.com/p/linphone-gtk/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -133,88 +133,88 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "%s si vás chce přidat do svého adresáře.\nDovolíte mu, aby viděl váš stav přítomnosti, nebo si ho také chcete přidat do svého adresáře?\nOdpovíte-li ne, tato osobo bude dočasně blokována." +msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "Chyba hovoru" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "Hovor ukončen" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Příchozí hovor" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Odpovědět" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Odmítnout" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "Hovor odložen" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "kým: %s" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s navrhuje začít videohovor. Přijímáte?" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "Odkaz na webovou stránku" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "%s (Výchozí)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "Byly jsme přepojeni na %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "Na tomto počítači nebyla objevena žádná zvuková karta.\nNebudete moci vytáčet a přijímat a zvukové hovory." -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "Volný SIP videofon" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "" @@ -578,7 +578,7 @@ msgstr "" msgid "Error" msgstr "Chyba" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "Ukončuje se" @@ -784,101 +784,101 @@ msgstr "" msgid "Downloading of remote configuration from %s failed." msgstr "" -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "" @@ -1755,60 +1755,60 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Připraven." -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "Vyhledává se umístění čísla…" -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "Toto číslo nelze vyhledat." #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "Navazuje se spojení" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "Nelze volat" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Je nám líto, ale byl dosažen maximální počet současných hovorů." -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "vás volá" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr " a požaduje automatickou zvednutí." -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "Upravují se parametry hovoru…" -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "Připojeno." -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "Hovor přerušen" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "Hovor nebylo možné odložit" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "Současný hovor se odkládá…" @@ -1884,7 +1884,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "SIP identita, kterou jste zadali, není platná.\nMěla by mít tvar sip:uživatel@proxydoména, například sip:alice@example.net" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "Nelze se přihlásit jako %s" @@ -2008,7 +2008,7 @@ msgstr "Klíč k ověření totožnosti je %s" msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/de.po b/po/de.po index 686c59446..738db0d49 100644 --- a/po/de.po +++ b/po/de.po @@ -12,10 +12,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-27 14:57+0000\n" -"Last-Translator: Ettore Atalan \n" -"Language-Team: German (http://www.transifex.com/projects/p/linphone-gtk/language/de/)\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: German (http://www.transifex.com/p/linphone-gtk/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -134,88 +134,88 @@ msgstr "Starte den Audio-Assistent" msgid "Run self test and exit 0 if succeed" msgstr "Selbsttest ausführen und mit 0 beenden, wenn erfolgreich" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "%s möchte Sie zu seiner Kontaktliste hinzufügen.\nMöchten Sie ihm erlauben, Ihren Anwesenheitsstatus zu sehen, oder ihn zu Ihrer Kontaktliste hinzufügen?\nWenn Sie mit Nein antworten, wird diese Person vorläufig blockiert." +msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "Bitte geben Sie Ihr Passwort für den Benutzernamen %s\n für Bereich %s ein:" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "Anruf fehlgeschlagen" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "Anruf beendet" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Eingehender Anruf" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Annehmen" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Abweisen" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "Anruf wird gehalten" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "von %s" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s schlägt vor, eine Videoübertragung zu starten. Nehmen Sie an?" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "Website-Verknüpfung" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "Ein Internet-Video-Telefon" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "%s (Vorgabe)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "Vermittlung nach %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "Auf diesem Rechner können keine Soundkarten gefunden werden.\nSie können keine Audio-Anrufe tätigen oder entgegennehmen." -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "Ein freies SIP-Video-Telefon" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "Hallo\n" @@ -578,7 +578,7 @@ msgstr "Kontogültigkeitsprüfung läuft" msgid "Error" msgstr "Fehler" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "Fertigstellen" @@ -784,101 +784,101 @@ msgstr "abrufen von %s" msgid "Downloading of remote configuration from %s failed." msgstr "Herunterladen der Fernkonfiguration von %s fehlgeschlagen" -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "Keine Stimme ermittelt" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "zu gering" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "gut" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "zu laut" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "Haben Sie die drei Signaltöne gehört?" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "Toneinstellungen nicht gefunden" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "Systemtonsteuerung kann nicht gestartet werden" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "Willkommen!\nDieser Assistent hilft Ihnen die Audioeinstellungen für Linphone einzurichten." -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "Aufnahmegerät" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "aufgenommene Lautstärke" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "Keine Stimme" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "Systemtoneinstellungen" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "Wiedergabegerät" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "spiele drei Pieptöne ab" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "Drücken Sie den Aufnahmeknopf und sagen Sie etwas" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "Hören Sie das Aufgenommene" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "Aufnahme" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "Wiedergabe" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "Linphone jetzt starten" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "Audio-Assistant" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "Audio-Assistant" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "Einrichtung MIkrofonverstärker" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "Einrichtung Lautstärke" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "aufnehmen und abspielen" @@ -1755,60 +1755,60 @@ msgstr "Einstellen..." msgid "Please wait while fetching configuration from server..." msgstr "Bitte warten Sie während die Einstellungen vom Server abgerufen werden..." -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Bereit" -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "Einstellen" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "Telefonnummernziel wird gesucht..." -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "Diese Nummer kann nicht aufgelöst werden." #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "Verbindungsaufbau" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "Anruf kann nicht getätigt werden." -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Die maximale Anzahl der gleichzeitigen Anrufe ist erreicht." -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "ruft Sie an" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr " und fragt nach automatischer Antwort." -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "Die Anrufparameter werden verändert..." -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "Verbunden." -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "Anruf abgebrochen" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "Anruf kann nicht gehalten werden" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "Aktueller Anruf wird gehalten..." @@ -1884,7 +1884,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "Die von Ihnen eingegebene SIP-Identität ist ungültig.\nSie sollte wie sip:benutzername@proxydomain aussehen, also z.B. sip:alice@beispiel.net" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "Anmeldung als %s fehlgeschlagen" @@ -2008,7 +2008,7 @@ msgstr "Authentifizierungs-Token ist %s" msgid "Call parameters were successfully modified." msgstr "Anrufparameter wurden erfolgreich geändert." -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/es.po b/po/es.po index 3f67ca98e..c18f02175 100644 --- a/po/es.po +++ b/po/es.po @@ -7,10 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 13:49+0000\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" "Last-Translator: Belledonne Communications \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/linphone-gtk/language/es/)\n" +"Language-Team: Spanish (http://www.transifex.com/p/linphone-gtk/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -129,88 +129,88 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "%s desea añadirle a su lista de contactos.\n¿Desea permitirle ver su estado de presencia o añadirle a su lista de contactos?\nSi responde no, esta persona será bloqueada temporalmente." +msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Llamada entrante" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Contestar" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "Enlace a la Web" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "%s (Opción predeterminada)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "Somos transferidos a %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "No se ha encontrado una tarjeta de sonido en este equipo.\nNo será posible realizar o recibir llamadas de audio." -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "Un video-teléfono SIP gratuito" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "" @@ -573,7 +573,7 @@ msgstr "" msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "" @@ -779,101 +779,101 @@ msgstr "" msgid "Downloading of remote configuration from %s failed." msgstr "" -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "" @@ -1750,60 +1750,60 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "" -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "Buscando el número de teléfono del destinatario…" -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "No se ha podido resolver este número." #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Disculpe, se ha alcanzado el máximo número de llamadas simultáneas" -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr "y ha solicitado auto respuesta." -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "Modificando parámetros de llamada…" -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "Conectado." -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "No se pudo pausar la llamada" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "Pausando la llamada actual..." @@ -1879,7 +1879,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "La identidad SIP que ha introducido no es válida.\nDebe ser del tipo sip:username@proxydomain, como por ejemplo sip:alice@example.net" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "" @@ -2003,7 +2003,7 @@ msgstr "" msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/fr.po b/po/fr.po index a0afc8520..751217994 100644 --- a/po/fr.po +++ b/po/fr.po @@ -12,10 +12,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 14:02+0000\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" "Last-Translator: Belledonne Communications \n" -"Language-Team: French (http://www.transifex.com/projects/p/linphone-gtk/language/fr/)\n" +"Language-Team: French (http://www.transifex.com/p/linphone-gtk/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -134,88 +134,88 @@ msgstr "Démarre l'assistant audio" msgid "Run self test and exit 0 if succeed" msgstr "Exécuter le test local et retourner 0 en cas de succès" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "%s souhaite vous ajouter à sa liste de contact.\nSouhaitez vous l'autoriser à voir votre information de présence et l'ajouter à votre liste également ?\nSi vous répondez non, cette personne sera mise temporairement sur liste noire." +msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "Entrez le mot de passe pour %s\n sur le domaine %s:" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "Erreur lors de l'appel" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "Appel terminé." -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Appel entrant" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Répondre" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Refuser" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "Appel en pause" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "b>par %s" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s propose de démarrer la vidéo. Acceptez-vous ?" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "Lien site web" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "Appels vidéo via internet" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "%s (par défaut)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "Transfert vers %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "Aucune carte son n'a été détectée sur cet ordinateur.\nVous ne pourrez pas effectuer d'appels audio." -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "Un visiophone libre" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "Bonjour\n" @@ -578,7 +578,7 @@ msgstr "Vérification de la validité du compte en cours" msgid "Error" msgstr "Erreur" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "En cours d’arrêt." @@ -784,101 +784,101 @@ msgstr "chargement depuis %s" msgid "Downloading of remote configuration from %s failed." msgstr "Le chargement de la configuration depuis %s a échoué." -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "Voix non détectée" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "Trop bas" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "Bien" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "Trop bruyant" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "Avez-vous entendu trois bips ?" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "Préférences son non trouvé" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "Impossible de démarrer le contrôleur système du son" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "Bienvenue !\nCet assistant va vous aider à régler les paramètres audio de votre ordinateur pour une utilisation optimale avec Linphone." -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "Périphérique de capture" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "Volume enregistré" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "Silencieux" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "Préférences son système" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "Périphérique d'écoute" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "Joue trois bips" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "Appuyer sur le bouton enregistrer et dites quelques mots" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "Ecoutez votre voix enregistrée" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "Enregistrer" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "Jouer" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "Démarrons Linphone maintenant" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "Assistant audio" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "Assistant audio" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "Calibration du gain du microphone" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "Calibration du volume du haut parleur" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "Enregistrer et joue" @@ -1755,60 +1755,60 @@ msgstr "Configuration en cours" msgid "Please wait while fetching configuration from server..." msgstr "Veuillez patenter un instant pendant le chargement de la configuration distante..." -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Prêt." -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "Configuration en cours" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "Recherche de la destination du numéro de téléphone..." -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "La destination n'a pu être trouvée." #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "Appel de" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "Echec de l'appel" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Désolé, le nombre maximum d'appels simultanés est atteint." -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "vous appelle" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr "et sollicite un décrochage automatique." -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "Modifications des paramètres d'appels..." -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "En ligne." -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "Appel abandonné" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "La mise en attente a échoué" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "Mise en attente de l'appel..." @@ -1884,7 +1884,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "L'identité SIP que vous avez fourni est invalide.\nElle doit être de la forme sip:utilisateur@domaine, comme par exemple sip:alice@example.net" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "Echec de la connexion en tant que %s" @@ -2008,7 +2008,7 @@ msgstr "Le jeton d'authentification est %s" msgid "Call parameters were successfully modified." msgstr "Les paramètres d'appel ont été modifiés avec succès." -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/he.po b/po/he.po index 54b391bc9..2b1539249 100644 --- a/po/he.po +++ b/po/he.po @@ -12,10 +12,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 13:49+0000\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" "Last-Translator: Belledonne Communications \n" -"Language-Team: Hebrew (http://www.transifex.com/projects/p/linphone-gtk/language/he/)\n" +"Language-Team: Hebrew (http://www.transifex.com/p/linphone-gtk/language/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -134,88 +134,88 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "‫%s מעוניין להוסיפך אל רשימת אנשי הקשר שלו.\nהאם ברצונך להרשות להם לראות את מצב נוכחותך או להוסיפם אל רשימת אנשי הקשר שלך ?\nהיה ותשובתך תהיה לא, אדם זה יהיה מסומן באופן זמני ברשימה השחורה." +msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "אנא הזן סיסמה עבור משתמש %s\nבמתחם %s:" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "שגיאת קריאה" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "שיחה הסתיימה" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "קריאה נכנסת" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "לענות" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "לדחות" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "שיחה הושהתה" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "על ידי %s" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "‏%s רוצה להתחיל וידאו. האם אתה מסכים ?" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "קישור אתר רשת" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "‫%s (ברירת מחדל)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "אנחנו מועברים אל %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "לא אותרו כרטיסי קול במחשב זה.\nלא תהיה ביכולתך לשלוח או לקבל שיחות אודיו." -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "וידאופון SIP חופשי" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "" @@ -578,7 +578,7 @@ msgstr "" msgid "Error" msgstr "שגיאה" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "מסיים כעת" @@ -784,101 +784,101 @@ msgstr "" msgid "Downloading of remote configuration from %s failed." msgstr "" -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "נמוך מדי" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "טוב" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "חזק מדי" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "התקן לכידה" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "אין קול" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "התקן השמעה" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "נגן שלושה צפצופים" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "הבא נתחיל את Linphone עכשיו" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "" @@ -1755,60 +1755,60 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "מוכן" -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "מחפש כעת עבור יעד מספר טלפון..." -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "לא ניתן לפתור את מספר זה." #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "מתקשר כעת" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "לא ניתן להתקשר" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "הגענו אל המספר המרבי של שיחות מקבילות, עמך הסליחה" -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "מתקשר/ת אליך" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr " ומבקש/ת מענה אוטומטי." -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "מתאים כעת פרמטרים של שיחה..." -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "מקושר." -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "קריאה בוטלה" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "לא ניתן להשהות את השיחה" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "משהה כעת שיחה נוכחית..." @@ -1884,7 +1884,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "זהות sip שהוזנה הינה שגויה.\nזו צריכה להיראות כמו sip:username@proxydomain, למשל sip:alice@example.net" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "לא ניתן להתחבר בזהות %s" @@ -2008,7 +2008,7 @@ msgstr "אות האימות הינה %s" msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/hu.po b/po/hu.po index 7e63b4c27..6e8ab77e8 100644 --- a/po/hu.po +++ b/po/hu.po @@ -7,10 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 13:49+0000\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" "Last-Translator: Belledonne Communications \n" -"Language-Team: Hungarian (http://www.transifex.com/projects/p/linphone-gtk/language/hu/)\n" +"Language-Team: Hungarian (http://www.transifex.com/p/linphone-gtk/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -129,88 +129,88 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "%s szeretné Önt hozzáadni partnerlistájához.\nSzeretné megengedni neki, hogy lássa az Ön jelenlétét, illetve hozzá szeretné adni a partnerlistához?\nHa nemmel válaszol, ez a személy átmenetileg tiltólistára kerül." +msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "Hiba a hívás közben" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "Hívás vége" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Beérkező hívás" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Hívás fogadása" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Elutasítás" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "Hívás várakoztatva" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "a következő által: %s" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s szerené elidítani a videót. Elfogadja?" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "Internetes oldal" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "%s (Alapértelmezett)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "Át vagyunk irányítva ide: %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "Hangkártya nincs érzékelve ezen a számítógépen.\nNem fog tudni hang hívásokat küldeni vagy fogadni." -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "Egy ingyenes SIP video-telefon" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "" @@ -573,7 +573,7 @@ msgstr "" msgid "Error" msgstr "Hiba" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "Befejezés" @@ -779,101 +779,101 @@ msgstr "" msgid "Downloading of remote configuration from %s failed." msgstr "" -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "" @@ -1750,60 +1750,60 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Kész" -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "Telefonszám-cél keresése..." -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "Nem sikkerült értelmezni a számot." #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "Kapcsolódás" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "Nem sikerült hívni" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Elnézést, elértük a egyidejű hívások maximális számát" -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "kapcsolatba lépett veled." -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr "és automatikus választ kért." -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "A hívási jellemzők módosítása..." -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "Kapcsolódva." -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "Hívás megszakítva" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "Nem sikerült várakoztatni a hívást" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "Jelenlegi hívás várakoztatásának aktiválása..." @@ -1879,7 +1879,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "Az Ön által megadott SIP identitás érvénytelen.\nÍgy kéne kinéznie: sip:felhasznalonev@proxytartomany, például sip:aladar@pelda.hu" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "Nem sikerült belépni ezzel: %s" @@ -2003,7 +2003,7 @@ msgstr "Hitelesítési jel: %s" msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/it.po b/po/it.po index e3fd544b6..ac1690617 100644 --- a/po/it.po +++ b/po/it.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Fabrizio Carrai, 2015 msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 13:49+0000\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" "Last-Translator: Belledonne Communications \n" -"Language-Team: Italian (http://www.transifex.com/projects/p/linphone-gtk/language/it/)\n" +"Language-Team: Italian (http://www.transifex.com/p/linphone-gtk/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -20,7 +21,7 @@ msgstr "" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 #, c-format msgid "Call %s" -msgstr "Chiamata %s" +msgstr "Chiama %s" #: ../gtk/calllogs.c:150 ../gtk/friendlist.c:977 #, c-format @@ -30,194 +31,194 @@ msgstr "Invia testo a %s" #: ../gtk/calllogs.c:233 #, c-format msgid "Recent calls (%i)" -msgstr "" +msgstr "Chiamate recenti (%i)" #: ../gtk/calllogs.c:315 msgid "n/a" -msgstr "" +msgstr "n/d" #: ../gtk/calllogs.c:318 msgid "Aborted" -msgstr "" +msgstr "Annullata" #: ../gtk/calllogs.c:321 msgid "Missed" -msgstr "" +msgstr "Persa" #: ../gtk/calllogs.c:324 msgid "Declined" -msgstr "" +msgstr "Rifiutata" #: ../gtk/calllogs.c:330 #, c-format msgid "%i minute" msgid_plural "%i minutes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%i minuto" +msgstr[1] "%i minuti" #: ../gtk/calllogs.c:333 #, c-format msgid "%i second" msgid_plural "%i seconds" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%i secondo" +msgstr[1] "%i secondi" #: ../gtk/calllogs.c:338 #, c-format msgid "" "%s\tQuality: %s\n" "%s\t%s\t" -msgstr "" +msgstr "%s\tQualità: %s\n%s\t%s\t" #: ../gtk/calllogs.c:342 #, c-format msgid "%s\t%s" -msgstr "" +msgstr "%s\t%s" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 msgid "Conference" -msgstr "" +msgstr "Conferenza" #: ../gtk/conference.c:46 msgid "Me" -msgstr "" +msgstr "Me" #: ../gtk/support.c:49 ../gtk/support.c:73 ../gtk/support.c:102 #, c-format msgid "Couldn't find pixmap file: %s" -msgstr "" +msgstr "Impossibile trovare il file pixmap %s" #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." -msgstr "" +msgstr "alcune informazioni di debug verranno registrate sullo stdout durante l'esecuzione" #: ../gtk/main.c:139 msgid "display version and exit." -msgstr "" +msgstr "mostra la versione e termina." #: ../gtk/main.c:140 msgid "path to a file to write logs into." -msgstr "" +msgstr "percorso del file di log." #: ../gtk/main.c:141 msgid "Start linphone with video disabled." -msgstr "" +msgstr "Avvia linphone con il video disabilitato." #: ../gtk/main.c:142 msgid "Start only in the system tray, do not show the main interface." -msgstr "" +msgstr "Avvia solo nel system tray, non mostrare l'interfaccia principale." #: ../gtk/main.c:143 msgid "address to call right now" -msgstr "" +msgstr "indirizzo da chiamare adesso" #: ../gtk/main.c:144 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" -msgstr "" +msgstr "Specificare una directory di lavoro (dovrebbe essere quella di installazione, es: c:\\Program Files\\Linphone)" #: ../gtk/main.c:145 msgid "Configuration file" -msgstr "" +msgstr "File di configurazione" #: ../gtk/main.c:146 msgid "Run the audio assistant" -msgstr "" +msgstr "Avvia l'assistente audio" #: ../gtk/main.c:147 msgid "Run self test and exit 0 if succeed" -msgstr "" +msgstr "Esegui il self test e esci con 0 in caso di successo" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "%s voui aggiungere il tuo contatto alla sua listaVoui permettere che lui veda il tuo stato o aggiungerlo alla tua lista dei contatti Se rispondi no questo utente sarà momentaneamente bloccato." +msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" -msgstr "" +msgstr "Digitare la password per l'utente %s\nnel dominio %s:" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" -msgstr "" +msgstr "Errore durante la chiamata" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "Chiamata terminata" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" -msgstr "Chimata in entrata" +msgstr "Chiamata in arrivo" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" -msgstr "" +msgstr "Risposta" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Rifiuta" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" -msgstr "" +msgstr "Chiamata in pausa" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" -msgstr "" +msgstr "da %s" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" -msgstr "" +msgstr "%s chiede di avviare il video. Accetti ?" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" -msgstr "" +msgstr "Collegamento al sito web" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" -msgstr "" +msgstr "Un videotelefono su internet" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "%s (Default)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" -msgstr "" +msgstr "Siamo trasferiti verso %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." -msgstr "" +msgstr "Non è stata trovata nessuna scheda audio.\nNon sarà possibile effettuare o ricevere chiamate in voce." -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" -msgstr "" +msgstr "Un videotelefono SIP free" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" -msgstr "" +msgstr "Salve\n" #: ../gtk/friendlist.c:506 msgid "Add to addressbook" -msgstr "" +msgstr "Aggiungi alla rubrica" #: ../gtk/friendlist.c:692 msgid "Presence status" @@ -229,11 +230,11 @@ msgstr "Nome" #: ../gtk/friendlist.c:722 msgid "Call" -msgstr "" +msgstr "Chiama" #: ../gtk/friendlist.c:727 msgid "Chat" -msgstr "" +msgstr "Chat" #: ../gtk/friendlist.c:757 #, c-format @@ -252,12 +253,12 @@ msgstr "Modifica contatto %s" #: ../gtk/friendlist.c:979 #, c-format msgid "Delete contact '%s'" -msgstr "Elimina contatto %s" +msgstr "Elimina il contatto %s" #: ../gtk/friendlist.c:980 #, c-format msgid "Delete chat history of '%s'" -msgstr "" +msgstr "Cancella la cronologia della chat con '%s'" #: ../gtk/friendlist.c:1031 #, c-format @@ -266,7 +267,7 @@ msgstr "Aggiungi nuovo contatto dalla directory %s" #: ../gtk/propertybox.c:597 msgid "Rate (Hz)" -msgstr "" +msgstr "Frequenza (Hz)" #: ../gtk/propertybox.c:603 msgid "Status" @@ -274,7 +275,7 @@ msgstr "Stato" #: ../gtk/propertybox.c:616 msgid "IP Bitrate (kbit/s)" -msgstr "" +msgstr "IP Bitrate (kbit/s)" #: ../gtk/propertybox.c:627 msgid "Parameters" @@ -314,7 +315,7 @@ msgstr "Spagnolo" #: ../gtk/propertybox.c:1166 msgid "Brazilian Portugese" -msgstr "" +msgstr "Portoghese brasiliano" #: ../gtk/propertybox.c:1167 msgid "Polish" @@ -346,31 +347,31 @@ msgstr "Ceco" #: ../gtk/propertybox.c:1174 msgid "Chinese" -msgstr "" +msgstr "Cinese" #: ../gtk/propertybox.c:1175 msgid "Traditional Chinese" -msgstr "" +msgstr "Cinese tradizionale" #: ../gtk/propertybox.c:1176 msgid "Norwegian" -msgstr "" +msgstr "Norvegese" #: ../gtk/propertybox.c:1177 msgid "Hebrew" -msgstr "" +msgstr "Ebraico" #: ../gtk/propertybox.c:1178 msgid "Serbian" -msgstr "" +msgstr "Serbo" #: ../gtk/propertybox.c:1179 msgid "Arabic" -msgstr "" +msgstr "Arabo" #: ../gtk/propertybox.c:1180 msgid "Turkish" -msgstr "" +msgstr "Turco" #: ../gtk/propertybox.c:1237 msgid "" @@ -379,30 +380,30 @@ msgstr "Riavviare il software per utilizzare la nuova lingua selezionata" #: ../gtk/propertybox.c:1317 msgid "None" -msgstr "" +msgstr "Nessuno" #: ../gtk/propertybox.c:1321 msgid "SRTP" -msgstr "" +msgstr "SRTP" #: ../gtk/propertybox.c:1327 msgid "DTLS" -msgstr "" +msgstr "DTLS" #: ../gtk/propertybox.c:1334 msgid "ZRTP" -msgstr "" +msgstr "ZRTP" #: ../gtk/update.c:80 #, c-format msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" -msgstr "Una versione più recente è disponibile da %s.\nVuoi aprire un browser per eseguire il download ?" +msgstr "Una versione più recente è disponibile su %s.\nVuoi aprire un browser per eseguire il download ?" #: ../gtk/update.c:91 msgid "You are running the lastest version." -msgstr "Non è stato trovato alcun aggiornamento" +msgstr "Stai eseguendo la versione più aggiornata." #: ../gtk/buddylookup.c:85 msgid "Firstname, Lastname" @@ -410,7 +411,7 @@ msgstr "Nome, Cognome" #: ../gtk/buddylookup.c:160 msgid "Error communicating with server." -msgstr "Errore di comunicazione" +msgstr "Errore di comunicazione con il server." #: ../gtk/buddylookup.c:164 msgid "Connecting..." @@ -418,68 +419,68 @@ msgstr "In connessione..." #: ../gtk/buddylookup.c:168 msgid "Connected" -msgstr "Connessione" +msgstr "Connesso" #: ../gtk/buddylookup.c:172 msgid "Receiving data..." -msgstr "Ricezione data..." +msgstr "Ricezione dei dati..." #: ../gtk/buddylookup.c:180 #, c-format msgid "Found %i contact" msgid_plural "Found %i contacts" msgstr[0] "Trovato %i contatto" -msgstr[1] "Trovato %i contatti" +msgstr[1] "Trovati %i contatti" #: ../gtk/setupwizard.c:161 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." -msgstr "" +msgstr "Benvenuto!\nL'assistente vi aiuterà ad usare un indirizzo SIP per le vostre chiamate." #: ../gtk/setupwizard.c:170 msgid "Create an account on linphone.org" -msgstr "" +msgstr "Creare un account su linphone.org" #: ../gtk/setupwizard.c:171 msgid "I have already a linphone.org account and I just want to use it" -msgstr "" +msgstr "Ho già un account su linphone.org che voglio usare." #: ../gtk/setupwizard.c:172 msgid "I have already a sip account and I just want to use it" -msgstr "" +msgstr "Ho già un account SIP e voglio usarlo" #: ../gtk/setupwizard.c:173 msgid "I want to specify a remote configuration URI" -msgstr "" +msgstr "Voglio specificare un URI per la configurazione remota" #: ../gtk/setupwizard.c:207 msgid "Enter your account information" -msgstr "" +msgstr "Inserire i dati del vostro account" #: ../gtk/setupwizard.c:222 msgid "Username*" -msgstr "" +msgstr "Nome utente*" #: ../gtk/setupwizard.c:223 msgid "Password*" -msgstr "" +msgstr "Password*" #: ../gtk/setupwizard.c:226 msgid "Domain*" -msgstr "" +msgstr "Dominio*" #: ../gtk/setupwizard.c:227 msgid "Proxy" -msgstr "" +msgstr "Proxy" #: ../gtk/setupwizard.c:264 msgid "Enter your linphone.org username" -msgstr "" +msgstr "Immettere il vostro nome utente su linphone.org" #: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" -msgstr "Manuale utente" +msgstr "Nome utente:" #: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" @@ -487,47 +488,47 @@ msgstr "Password:" #: ../gtk/setupwizard.c:420 msgid "(*) Required fields" -msgstr "" +msgstr "(*) Campi obbligatori" #: ../gtk/setupwizard.c:421 msgid "Username: (*)" -msgstr "" +msgstr "Nome utente: (*)" #: ../gtk/setupwizard.c:423 msgid "Password: (*)" -msgstr "" +msgstr "Password: (*)" #: ../gtk/setupwizard.c:425 msgid "Email: (*)" -msgstr "" +msgstr "Email: (*)" #: ../gtk/setupwizard.c:427 msgid "Confirm your password: (*)" -msgstr "" +msgstr "Confermare la password: (*)" #: ../gtk/setupwizard.c:442 msgid "Keep me informed with linphone updates" -msgstr "" +msgstr "Mantenetemi aggiornato sugli aggiornamenti di linphone" #: ../gtk/setupwizard.c:487 msgid "Your account is being created, please wait." -msgstr "" +msgstr "Il vostro account è stato creato, attendere." #: ../gtk/setupwizard.c:495 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." -msgstr "" +msgstr "Attivate il vostro account cin il link che vi è appena stato inviato per posta elettronica.\nQuindi tornare qui e premere il tasto \"Avanti\"." #: ../gtk/setupwizard.c:505 msgid "Checking if your account is been validated, please wait." -msgstr "" +msgstr "Verifica della validazione dell'account, attendere." #: ../gtk/setupwizard.c:513 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." -msgstr "" +msgstr "Errore, account non valido, nome utente già in uso o server non raggiungibile.\nTornare indietro e riprovare." #: ../gtk/setupwizard.c:522 msgid "Thank you. Your account is now configured and ready for use." @@ -535,7 +536,7 @@ msgstr "Grazie. Il tuo account è configurato e pronto all'uso" #: ../gtk/setupwizard.c:558 msgid "SIP account configuration assistant" -msgstr "" +msgstr "Assistente per la configurazione di un account SIP" #: ../gtk/setupwizard.c:579 msgid "Welcome to the account setup assistant" @@ -547,187 +548,187 @@ msgstr "Configuratore di account" #: ../gtk/setupwizard.c:589 msgid "Configure your account (step 1/1)" -msgstr "" +msgstr "Configurare il tuo account (passo 1/1)" #: ../gtk/setupwizard.c:593 msgid "Enter your sip username (step 1/1)" -msgstr "" +msgstr "Introdurre il vostro nome utente SIP (passo 1/1)" #: ../gtk/setupwizard.c:597 msgid "Enter account information (step 1/2)" -msgstr "" +msgstr "Introdurre le informazioni dell'account (passo 1/2)" #: ../gtk/setupwizard.c:602 msgid "Account creation in progress" -msgstr "" +msgstr "Creazione dell'account in corso" #: ../gtk/setupwizard.c:606 msgid "Validation (step 2/2)" -msgstr "" +msgstr "Validazione (passo 2/2)" #: ../gtk/setupwizard.c:611 msgid "Account validation check in progress" -msgstr "" +msgstr "Controllo della validazione dell'account in corso" #: ../gtk/setupwizard.c:615 msgid "Error" -msgstr "" +msgstr "Errore" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" -msgstr "" +msgstr "Terminando" #: ../gtk/incall_view.c:70 ../gtk/incall_view.c:94 #, c-format msgid "Call #%i" -msgstr "" +msgstr "Chiamata #%i" #: ../gtk/incall_view.c:155 #, c-format msgid "Transfer to call #%i with %s" -msgstr "" +msgstr "Trasferimento per chiamare #%i con %s" #: ../gtk/incall_view.c:211 ../gtk/incall_view.c:214 msgid "Not used" -msgstr "" +msgstr "Non usato" #: ../gtk/incall_view.c:221 msgid "ICE not activated" -msgstr "" +msgstr "ICE non attivato" #: ../gtk/incall_view.c:223 msgid "ICE failed" -msgstr "" +msgstr "ICE fallito" #: ../gtk/incall_view.c:225 msgid "ICE in progress" -msgstr "" +msgstr "ICE in corso" #: ../gtk/incall_view.c:227 msgid "Going through one or more NATs" -msgstr "" +msgstr "Attraversando uno o più NAT" #: ../gtk/incall_view.c:229 msgid "Direct" -msgstr "" +msgstr "Diretto" #: ../gtk/incall_view.c:231 msgid "Through a relay server" -msgstr "" +msgstr "Attraverso un relay server" #: ../gtk/incall_view.c:239 msgid "uPnP not activated" -msgstr "" +msgstr "uPnP non attivo" #: ../gtk/incall_view.c:241 msgid "uPnP in progress" -msgstr "" +msgstr "uPnP in corso" #: ../gtk/incall_view.c:243 msgid "uPnp not available" -msgstr "" +msgstr "uPnP non disponibile" #: ../gtk/incall_view.c:245 msgid "uPnP is running" -msgstr "" +msgstr "uPnP in esecuzione" #: ../gtk/incall_view.c:247 msgid "uPnP failed" -msgstr "" +msgstr "uPnP ha fallito" #: ../gtk/incall_view.c:257 ../gtk/incall_view.c:258 msgid "Direct or through server" -msgstr "" +msgstr "Diretto o attraverso un server" #: ../gtk/incall_view.c:267 ../gtk/incall_view.c:279 #, c-format msgid "" "download: %f\n" "upload: %f (kbit/s)" -msgstr "" +msgstr "download: %f\nupload: %f (kbit/s)" #: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 #, c-format msgid "%ix%i @ %f fps" -msgstr "" +msgstr "%ix%i @ %f fps" #: ../gtk/incall_view.c:304 #, c-format msgid "%.3f seconds" -msgstr "" +msgstr "%.3f secondi" #: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 msgid "Hang up" -msgstr "" +msgstr "Riagganciare" #: ../gtk/incall_view.c:511 msgid "Calling..." -msgstr "" +msgstr "Chiamando..." #: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 msgid "00::00::00" -msgstr "" +msgstr "00::00::00" #: ../gtk/incall_view.c:525 msgid "Incoming call" -msgstr "" +msgstr "Chiamata in ingresso" #: ../gtk/incall_view.c:562 msgid "good" -msgstr "" +msgstr "bene" #: ../gtk/incall_view.c:564 msgid "average" -msgstr "" +msgstr "media" #: ../gtk/incall_view.c:566 msgid "poor" -msgstr "" +msgstr "ridotto" #: ../gtk/incall_view.c:568 msgid "very poor" -msgstr "" +msgstr "molto poco" #: ../gtk/incall_view.c:570 msgid "too bad" -msgstr "" +msgstr "troppo brutto" #: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" -msgstr "" +msgstr "non disponibile" #: ../gtk/incall_view.c:679 msgid "Secured by SRTP" -msgstr "" +msgstr "Trasmissione sicura con SRTP" #: ../gtk/incall_view.c:685 msgid "Secured by DTLS" -msgstr "" +msgstr "Trasmissione sicura con DTLS" #: ../gtk/incall_view.c:691 #, c-format msgid "Secured by ZRTP - [auth token: %s]" -msgstr "" +msgstr "Trasmissione sicura con ZRTP - [auth token: %s]" #: ../gtk/incall_view.c:697 msgid "Set unverified" -msgstr "" +msgstr "Marcato con non verificato" #: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 msgid "Set verified" -msgstr "" +msgstr "Marcato come verificato" #: ../gtk/incall_view.c:728 msgid "In conference" -msgstr "" +msgstr "In conferenza" #: ../gtk/incall_view.c:728 msgid "In call" -msgstr "" +msgstr "Chiamata in corso" #: ../gtk/incall_view.c:764 msgid "Paused call" -msgstr "" +msgstr "Chiamata sospesa" #: ../gtk/incall_view.c:800 msgid "Call ended." @@ -735,34 +736,34 @@ msgstr "Chiamata terminata." #: ../gtk/incall_view.c:831 msgid "Transfer in progress" -msgstr "" +msgstr "Trasferimento in corso" #: ../gtk/incall_view.c:834 msgid "Transfer done." -msgstr "" +msgstr "Trasferimento completato." #: ../gtk/incall_view.c:837 msgid "Transfer failed." -msgstr "" +msgstr "Trasferimento fallito." #: ../gtk/incall_view.c:881 msgid "Resume" -msgstr "" +msgstr "Riprendere" #: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 msgid "Pause" -msgstr "" +msgstr "Pausa" #: ../gtk/incall_view.c:954 #, c-format msgid "" "Recording into\n" "%s %s" -msgstr "" +msgstr "Registrare in\n%s %s" #: ../gtk/incall_view.c:954 msgid "(Paused)" -msgstr "" +msgstr "(Sospeso)" #: ../gtk/loginframe.c:87 #, c-format @@ -772,114 +773,114 @@ msgstr "Prego inserire le proprie credenziali di accesso per %s" #: ../gtk/config-fetching.c:57 #, c-format msgid "fetching from %s" -msgstr "" +msgstr "prelevando da %s" #: ../gtk/config-fetching.c:73 #, c-format msgid "Downloading of remote configuration from %s failed." -msgstr "" +msgstr "Il trasferimento della configurazione remota da %s è fallito." -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" -msgstr "" +msgstr "Non è stata riconosciuta nessuna voce" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" -msgstr "" +msgstr "Troppo basso" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" -msgstr "" +msgstr "Bene" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" -msgstr "" +msgstr "Troppo forte" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" -msgstr "" +msgstr "Hai sentito tre segnali ?" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " -msgstr "" +msgstr "Le preferenze sui suoni non sono state trovate" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " -msgstr "" +msgstr "Non è possibile eseguire il controllo dell'audio di sistema" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" -msgstr "" +msgstr "Benvenuto!\nL'assistente ti aiuterà a configurare i settaggi audio di Linphone" -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" -msgstr "" +msgstr "Dispositivo di acquisizione" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" -msgstr "" +msgstr "Volume di registrazione" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" -msgstr "" +msgstr "Nessuna voce" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" -msgstr "" +msgstr "Preferenze per l'audio di sistema" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" -msgstr "" +msgstr "Dispositivo di riproduzione" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" -msgstr "" +msgstr "Riproduci tre segnali" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" -msgstr "" +msgstr "Premere il pulsante registrazione e parlare" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" -msgstr "" +msgstr "Ascoltare la voce registrata" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" -msgstr "" +msgstr "Registra" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" -msgstr "" +msgstr "Riproduci" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" -msgstr "" +msgstr "Ora avviamo Linphone" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" -msgstr "" +msgstr "Assistente Audio" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" -msgstr "" +msgstr "Assistente Audio" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" -msgstr "" +msgstr "Calibrazione del guadagano del microfono" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" -msgstr "" +msgstr "Calibrazione del volume di riproduzione" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" -msgstr "" +msgstr "Registra e Riproduci" #: ../gtk/main.ui.h:1 msgid "Callee name" -msgstr "" +msgstr "Nome del chiamato" #: ../gtk/main.ui.h:2 msgid "Send" @@ -887,23 +888,23 @@ msgstr "Invia" #: ../gtk/main.ui.h:3 msgid "End conference" -msgstr "" +msgstr "Fine della conferenza" #: ../gtk/main.ui.h:7 msgid "Record this call to an audio file" -msgstr "" +msgstr "Registra questa chiamata su un file audio" #: ../gtk/main.ui.h:8 msgid "Video" -msgstr "" +msgstr "Video" #: ../gtk/main.ui.h:10 msgid "Mute" -msgstr "" +msgstr "Silenzia" #: ../gtk/main.ui.h:11 msgid "Transfer" -msgstr "" +msgstr "Trasferimento" #: ../gtk/main.ui.h:14 msgid "In call" @@ -915,23 +916,23 @@ msgstr "Durata" #: ../gtk/main.ui.h:16 msgid "Call quality rating" -msgstr "" +msgstr "Giudizio della qualità della chiamata" #: ../gtk/main.ui.h:17 msgid "All users" -msgstr "" +msgstr "Tutti gli utenti" #: ../gtk/main.ui.h:18 msgid "Online users" -msgstr "" +msgstr "Utenti in linea" #: ../gtk/main.ui.h:19 msgid "ADSL" -msgstr "" +msgstr "ADSL" #: ../gtk/main.ui.h:20 msgid "Fiber Channel" -msgstr "" +msgstr "Fibra ottica" #: ../gtk/main.ui.h:21 msgid "Default" @@ -939,19 +940,19 @@ msgstr "Default" #: ../gtk/main.ui.h:22 msgid "Delete" -msgstr "" +msgstr "Cancellare" #: ../gtk/main.ui.h:23 msgid "_Options" -msgstr "" +msgstr "_Options" #: ../gtk/main.ui.h:24 msgid "Set configuration URI" -msgstr "" +msgstr "Imposta l' URI di configurazione" #: ../gtk/main.ui.h:25 msgid "Always start video" -msgstr "" +msgstr "Avvia sempre il video" #: ../gtk/main.ui.h:26 msgid "Enable self-view" @@ -959,23 +960,23 @@ msgstr "Self-view abilitato" #: ../gtk/main.ui.h:27 msgid "_Help" -msgstr "" +msgstr "_Help" #: ../gtk/main.ui.h:28 msgid "Show debug window" -msgstr "" +msgstr "Mostra la finestra di debug" #: ../gtk/main.ui.h:29 msgid "_Homepage" -msgstr "" +msgstr "_Homepage" #: ../gtk/main.ui.h:30 msgid "Check _Updates" -msgstr "" +msgstr "Check _Updates" #: ../gtk/main.ui.h:31 msgid "Account assistant" -msgstr "" +msgstr "Assistente per l'account" #: ../gtk/main.ui.h:33 msgid "SIP address or phone number:" @@ -983,27 +984,27 @@ msgstr "Indirizzo sip o numero." #: ../gtk/main.ui.h:34 msgid "Initiate a new call" -msgstr "" +msgstr "Inizia una nuova chiamata" #: ../gtk/main.ui.h:35 msgid "Contacts" -msgstr "" +msgstr "Contatti" #: ../gtk/main.ui.h:36 msgid "Search" -msgstr "" +msgstr "Ricerca" #: ../gtk/main.ui.h:37 msgid "Add contacts from directory" -msgstr "" +msgstr "Aggiungi contatti dalla directory" #: ../gtk/main.ui.h:38 msgid "Add contact" -msgstr "" +msgstr "Aggiungi un contatto" #: ../gtk/main.ui.h:39 msgid "Recent calls" -msgstr "" +msgstr "Chiamate recenti" #: ../gtk/main.ui.h:40 msgid "My current identity:" @@ -1027,7 +1028,7 @@ msgstr "Login Automatico" #: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 msgid "UserID" -msgstr "" +msgstr "Identificativo utente" #: ../gtk/main.ui.h:46 msgid "Login information" @@ -1035,19 +1036,19 @@ msgstr "Credenziali di accesso" #: ../gtk/main.ui.h:47 msgid "Welcome!" -msgstr "" +msgstr "Benvenuto!" #: ../gtk/about.ui.h:1 msgid "About Linphone" -msgstr "" +msgstr "Su Linphone" #: ../gtk/about.ui.h:2 msgid "(C) Belledonne Communications, 2010\n" -msgstr "" +msgstr "(C) Belledonne Communications, 2010\n" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." -msgstr "" +msgstr "Un videotelefono con protocollo standard SIP (RFC 3261) " #: ../gtk/about.ui.h:5 msgid "" @@ -1063,7 +1064,7 @@ msgid "" "cs: Petr Pisar \n" "hu: anonymous\n" "he: Eli Zaretskii \n" -msgstr "" +msgstr "fr: Simon Morlat\nen: Simon Morlat and Delphine Perreau\nit: Alberto Zanoni \nit: Fabrizio Carrai\nde: Jean-Jacques Sarton \nsv: Daniel Nylander \nes: Jesus Benitez \nja: YAMAGUCHI YOSHIYA \npt_BR: Rafael Caesar Lenzi \npl: Robert Nasiadek \ncs: Petr Pisar \nhu: anonymous\nhe: Eli Zaretskii \n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1087,11 +1088,11 @@ msgstr "Linphone debug window" #: ../gtk/log.ui.h:2 msgid "Scroll to end" -msgstr "" +msgstr "Vai in fondo" #: ../gtk/password.ui.h:1 msgid "Linphone - Authentication required" -msgstr "" +msgstr "Linphone - E' richiesta l'autenticazione" #: ../gtk/password.ui.h:2 msgid "Please enter the domain password" @@ -1103,11 +1104,11 @@ msgstr "Cronologia" #: ../gtk/call_logs.ui.h:2 msgid "Clear all" -msgstr "" +msgstr "Pulisci tutto" #: ../gtk/call_logs.ui.h:3 msgid "Call back" -msgstr "" +msgstr "Richiamata" #: ../gtk/sip_account.ui.h:1 msgid "Linphone - Configure a SIP account" @@ -1119,7 +1120,7 @@ msgstr "Identità SIP" #: ../gtk/sip_account.ui.h:3 msgid "Looks like sip:@" -msgstr "" +msgstr "Simile a sip:@" #: ../gtk/sip_account.ui.h:4 msgid "sip:" @@ -1131,7 +1132,7 @@ msgstr "Indirizzo sip proxy:" #: ../gtk/sip_account.ui.h:6 msgid "Looks like sip:" -msgstr "" +msgstr "Simile a sip:" #: ../gtk/sip_account.ui.h:7 msgid "Registration duration (sec):" @@ -1139,11 +1140,11 @@ msgstr "Durata registrazione (sec)" #: ../gtk/sip_account.ui.h:8 msgid "Contact params (optional):" -msgstr "" +msgstr "Parametri del contatto (opzionali)" #: ../gtk/sip_account.ui.h:9 msgid "AVPF regular RTCP interval (sec):" -msgstr "" +msgstr "AVPF regular RTCP interval (sec):" #: ../gtk/sip_account.ui.h:10 msgid "Route (optional):" @@ -1151,11 +1152,11 @@ msgstr "Rotta (opzionale)" #: ../gtk/sip_account.ui.h:11 msgid "Transport" -msgstr "" +msgstr "Trasporto" #: ../gtk/sip_account.ui.h:12 msgid "Register" -msgstr "" +msgstr "Registro" #: ../gtk/sip_account.ui.h:13 msgid "Publish presence information" @@ -1163,7 +1164,7 @@ msgstr "Pubblica stato della presenza" #: ../gtk/sip_account.ui.h:14 msgid "Enable AVPF" -msgstr "" +msgstr "Abilita AVPF" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" @@ -1171,15 +1172,15 @@ msgstr "Configurazione SIP account" #: ../gtk/parameters.ui.h:1 msgid "anonymous" -msgstr "" +msgstr "anonimo" #: ../gtk/parameters.ui.h:2 msgid "GSSAPI" -msgstr "" +msgstr "GSSAPI" #: ../gtk/parameters.ui.h:3 msgid "SASL" -msgstr "" +msgstr "SASL" #: ../gtk/parameters.ui.h:4 msgid "default soundcard" @@ -1187,7 +1188,7 @@ msgstr "default scheda audio" #: ../gtk/parameters.ui.h:5 msgid "a sound card" -msgstr "" +msgstr "una scheda audio" #: ../gtk/parameters.ui.h:6 msgid "default camera" @@ -1199,11 +1200,11 @@ msgstr "CIF" #: ../gtk/parameters.ui.h:8 msgid "Audio codecs" -msgstr "" +msgstr "Codificatori audio" #: ../gtk/parameters.ui.h:9 msgid "Video codecs" -msgstr "" +msgstr "Codificatori video" #: ../gtk/parameters.ui.h:10 msgid "C" @@ -1211,27 +1212,27 @@ msgstr "C" #: ../gtk/parameters.ui.h:11 msgid "SIP (UDP)" -msgstr "" +msgstr "SIP (UDP)" #: ../gtk/parameters.ui.h:12 msgid "SIP (TCP)" -msgstr "" +msgstr "SIP (TCP)" #: ../gtk/parameters.ui.h:13 msgid "SIP (TLS)" -msgstr "" +msgstr "SIP (TLS)" #: ../gtk/parameters.ui.h:14 msgid "default" -msgstr "" +msgstr "default" #: ../gtk/parameters.ui.h:15 msgid "high-fps" -msgstr "" +msgstr "high-fps" #: ../gtk/parameters.ui.h:16 msgid "custom" -msgstr "" +msgstr "custom" #: ../gtk/parameters.ui.h:17 msgid "Settings" @@ -1259,7 +1260,7 @@ msgstr "Identità di default" #: ../gtk/parameters.ui.h:23 msgid "Wizard" -msgstr "" +msgstr "Wizard" #: ../gtk/parameters.ui.h:24 msgid "Add" @@ -1287,15 +1288,15 @@ msgstr "Privacy" #: ../gtk/parameters.ui.h:30 msgid "Automatically answer when a call is received" -msgstr "" +msgstr "Rispondi automaticamente alla chiamata in arrivo" #: ../gtk/parameters.ui.h:31 msgid "Delay before answering (ms)" -msgstr "" +msgstr "Ritardo prima della risposta (ms)" #: ../gtk/parameters.ui.h:32 msgid "Auto-answer" -msgstr "" +msgstr "Risposta automatica" #: ../gtk/parameters.ui.h:33 msgid "Manage SIP Accounts" @@ -1335,23 +1336,23 @@ msgstr "Dispositivo Video:" #: ../gtk/parameters.ui.h:42 msgid "Preferred video resolution:" -msgstr "" +msgstr "Risoluzione video preferita:" #: ../gtk/parameters.ui.h:43 msgid "Video output method:" -msgstr "" +msgstr "Modalità video in uscita:" #: ../gtk/parameters.ui.h:44 msgid "Show camera preview" -msgstr "" +msgstr "Mostra il preview della videocamera" #: ../gtk/parameters.ui.h:45 msgid "Video preset:" -msgstr "" +msgstr "Preconfigurazione del video:" #: ../gtk/parameters.ui.h:46 msgid "Preferred video framerate:" -msgstr "" +msgstr "Frame rate video preferito:" #: ../gtk/parameters.ui.h:47 msgid "0 stands for \"unlimited\"" @@ -1371,13 +1372,13 @@ msgstr "Velocita massima in Dowload Kbit/sec" #: ../gtk/parameters.ui.h:51 msgid "Enable adaptive rate control" -msgstr "" +msgstr "Abilita il controllo adattivo del rate" #: ../gtk/parameters.ui.h:52 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." -msgstr "" +msgstr "Il controllo adattivo del rate è una tecnica per la stima dinamica della banda disponibile durante una chiamata" #: ../gtk/parameters.ui.h:53 msgid "Bandwidth control" @@ -1397,7 +1398,7 @@ msgstr "Invia DTMF come SIP info" #: ../gtk/parameters.ui.h:57 msgid "Allow IPv6" -msgstr "" +msgstr "Permetti IPv6" #: ../gtk/parameters.ui.h:58 msgid "Transport" @@ -1405,15 +1406,15 @@ msgstr "Transporto" #: ../gtk/parameters.ui.h:59 msgid "SIP/UDP port" -msgstr "" +msgstr "Porta SIP/UDP" #: ../gtk/parameters.ui.h:61 msgid "Random" -msgstr "" +msgstr "Casuale" #: ../gtk/parameters.ui.h:62 msgid "SIP/TCP port" -msgstr "" +msgstr "Porta SIP/TCP" #: ../gtk/parameters.ui.h:63 msgid "Audio RTP/UDP:" @@ -1421,7 +1422,7 @@ msgstr "Audio RTP/UDP:" #: ../gtk/parameters.ui.h:64 msgid "Fixed" -msgstr "" +msgstr "Fissa" #: ../gtk/parameters.ui.h:65 msgid "Video RTP/UDP:" @@ -1429,23 +1430,23 @@ msgstr "Video RTP/UDP" #: ../gtk/parameters.ui.h:66 msgid "Media encryption type" -msgstr "" +msgstr "Tipo di cifratura" #: ../gtk/parameters.ui.h:67 msgid "Media encryption is mandatory" -msgstr "" +msgstr "La cifratura è obbligatoria" #: ../gtk/parameters.ui.h:68 msgid "Tunnel" -msgstr "" +msgstr "Tunnel" #: ../gtk/parameters.ui.h:69 msgid "DSCP fields" -msgstr "" +msgstr "Campi DSCP" #: ../gtk/parameters.ui.h:70 msgid "Network protocol and ports" -msgstr "" +msgstr "Protocollo di rete e porte" #: ../gtk/parameters.ui.h:71 msgid "Direct connection to the Internet" @@ -1453,7 +1454,7 @@ msgstr "Connessione diretta a internet" #: ../gtk/parameters.ui.h:72 msgid "Behind NAT / Firewall (specify gateway IP )" -msgstr "" +msgstr "Dietro ad un NAT / Firewall (specificare IP del gateway)" #: ../gtk/parameters.ui.h:73 msgid "Behind NAT / Firewall (use STUN to resolve)" @@ -1461,19 +1462,19 @@ msgstr "Dietro NAT / Firewall (utilizza STUN)" #: ../gtk/parameters.ui.h:74 msgid "Behind NAT / Firewall (use ICE)" -msgstr "" +msgstr "Dietro ad un NAT / Firewall (usa ICE)" #: ../gtk/parameters.ui.h:75 msgid "Behind NAT / Firewall (use uPnP)" -msgstr "" +msgstr "Dietro ad un NAT / Fiewall (usa uPnP)" #: ../gtk/parameters.ui.h:76 msgid "Public IP address:" -msgstr "Indirizzo ip pubblico:" +msgstr "Indirizzo IP pubblico:" #: ../gtk/parameters.ui.h:77 msgid "Stun server:" -msgstr "Stun server:" +msgstr "Server STUN:" #: ../gtk/parameters.ui.h:78 msgid "NAT and Firewall" @@ -1493,11 +1494,11 @@ msgstr "Disattivato" #: ../gtk/parameters.ui.h:82 msgid "Audio codecs" -msgstr "" +msgstr "Codificatori audio" #: ../gtk/parameters.ui.h:83 msgid "Video codecs" -msgstr "" +msgstr "Codificatori video" #: ../gtk/parameters.ui.h:84 msgid "Codecs" @@ -1509,11 +1510,11 @@ msgstr "Linguaggio" #: ../gtk/parameters.ui.h:86 msgid "Show advanced settings" -msgstr "" +msgstr "Mostra la configurazione avanzata" #: ../gtk/parameters.ui.h:87 msgid "Level" -msgstr "" +msgstr "Livello" #: ../gtk/parameters.ui.h:88 msgid "User interface" @@ -1521,19 +1522,19 @@ msgstr "Interfaccia utente" #: ../gtk/parameters.ui.h:89 ../gtk/ldap.ui.h:2 msgid "Server address:" -msgstr "" +msgstr "Indirizzo del server:" #: ../gtk/parameters.ui.h:90 ../gtk/ldap.ui.h:3 msgid "Authentication method:" -msgstr "" +msgstr "Metodo di autenticazione" #: ../gtk/parameters.ui.h:92 msgid "LDAP Account setup" -msgstr "" +msgstr "Configurazione dell' account LDAP" #: ../gtk/parameters.ui.h:93 msgid "LDAP" -msgstr "" +msgstr "LDAP" #: ../gtk/parameters.ui.h:94 msgid "Done" @@ -1557,39 +1558,39 @@ msgstr "Prego attendere" #: ../gtk/dscp_settings.ui.h:1 msgid "DSCP settings" -msgstr "" +msgstr "Configurazione DSCP" #: ../gtk/dscp_settings.ui.h:2 msgid "SIP" -msgstr "" +msgstr "SIP" #: ../gtk/dscp_settings.ui.h:3 msgid "Audio RTP stream" -msgstr "" +msgstr "Stream audio RTP" #: ../gtk/dscp_settings.ui.h:4 msgid "Video RTP stream" -msgstr "" +msgstr "Stream video RTP" #: ../gtk/dscp_settings.ui.h:5 msgid "Set DSCP values (in hexadecimal)" -msgstr "" +msgstr "Valore DSCP (in esadecimale)" #: ../gtk/call_statistics.ui.h:1 msgid "Call statistics" -msgstr "" +msgstr "Statistiche della chiamata" #: ../gtk/call_statistics.ui.h:2 msgid "Audio codec" -msgstr "" +msgstr "Codec audio" #: ../gtk/call_statistics.ui.h:3 msgid "Video codec" -msgstr "" +msgstr "Codec video" #: ../gtk/call_statistics.ui.h:4 msgid "Audio IP bandwidth usage" -msgstr "" +msgstr "Banda IP impiegata per l'audio" #: ../gtk/call_statistics.ui.h:5 msgid "Audio Media connectivity" @@ -1597,7 +1598,7 @@ msgstr "" #: ../gtk/call_statistics.ui.h:6 msgid "Video IP bandwidth usage" -msgstr "" +msgstr "Banda IP impiegata per il video" #: ../gtk/call_statistics.ui.h:7 msgid "Video Media connectivity" @@ -1605,59 +1606,59 @@ msgstr "" #: ../gtk/call_statistics.ui.h:8 msgid "Round trip time" -msgstr "" +msgstr "Tempo di andata/ritorno" #: ../gtk/call_statistics.ui.h:9 msgid "Video resolution received" -msgstr "" +msgstr "Risoluzione video ricevuta" #: ../gtk/call_statistics.ui.h:10 msgid "Video resolution sent" -msgstr "" +msgstr "Risoluzione video trasmessa" #: ../gtk/call_statistics.ui.h:11 msgid "RTP profile" -msgstr "" +msgstr "Profilo RTP" #: ../gtk/call_statistics.ui.h:12 msgid "Call statistics and information" -msgstr "" +msgstr "Statistiche della chiamata e informazioni" #: ../gtk/tunnel_config.ui.h:1 msgid "Configure VoIP tunnel" -msgstr "" +msgstr "Configurare il tunnel VoIP" #: ../gtk/tunnel_config.ui.h:2 msgid "Host" -msgstr "" +msgstr "Host" #: ../gtk/tunnel_config.ui.h:3 msgid "Port" -msgstr "" +msgstr "Porta" #: ../gtk/tunnel_config.ui.h:6 msgid "Configure tunnel" -msgstr "" +msgstr "Configurazione del tunnel" #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" -msgstr "" +msgstr "Configurazione del proxy http (opzionale)" #: ../gtk/ldap.ui.h:1 msgid "LDAP Settings" -msgstr "" +msgstr "Configurazione LDAP" #: ../gtk/ldap.ui.h:6 msgid "Use TLS Connection" -msgstr "" +msgstr "Usa connessione TLS" #: ../gtk/ldap.ui.h:7 msgid "Not yet available" -msgstr "" +msgstr "Not ancora disponibile" #: ../gtk/ldap.ui.h:8 msgid "Connection" -msgstr "" +msgstr "Connessione" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" @@ -1669,44 +1670,44 @@ msgstr "" #: ../gtk/ldap.ui.h:11 msgid "Realm" -msgstr "" +msgstr "Dominio" #: ../gtk/ldap.ui.h:12 msgid "SASL" -msgstr "" +msgstr "SASL" #: ../gtk/ldap.ui.h:13 msgid "Base object:" -msgstr "" +msgstr "Oggetto di base" #: ../gtk/ldap.ui.h:15 #, no-c-format msgid "Filter (%s for name):" -msgstr "" +msgstr "Filtro (%s per il nome):" #: ../gtk/ldap.ui.h:16 msgid "Name Attribute:" -msgstr "" +msgstr "Attributo Nome:" #: ../gtk/ldap.ui.h:17 msgid "SIP address attribute:" -msgstr "" +msgstr "Attributo SIP address" #: ../gtk/ldap.ui.h:18 msgid "Attributes to query:" -msgstr "" +msgstr "Attributo da cercare:" #: ../gtk/ldap.ui.h:19 msgid "Search" -msgstr "" +msgstr "Ricerca" #: ../gtk/ldap.ui.h:20 msgid "Timeout for search:" -msgstr "" +msgstr "Tempo limite per la ricerca:" #: ../gtk/ldap.ui.h:21 msgid "Max results:" -msgstr "" +msgstr "Massimo numero di risultati:" #: ../gtk/ldap.ui.h:22 msgid "Follow Aliases" @@ -1714,11 +1715,11 @@ msgstr "" #: ../gtk/ldap.ui.h:23 msgid "Miscellaneous" -msgstr "" +msgstr "Varie" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" -msgstr "" +msgstr "ANONYMOUS" #: ../gtk/ldap.ui.h:25 msgid "SIMPLE" @@ -1750,62 +1751,62 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Pronto" -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "Ricerca numero destinazione..." -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "Impossibile risolvere il numero." #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "In connessione" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" -msgstr "" +msgstr "Impossibile chiamare" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" -msgstr "" +msgstr "Spiacenti, è stato raggiunto il massimo numero di chiamate simultanee" -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" -msgstr "" +msgstr "ti sta contattando" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." -msgstr "" +msgstr "e ha richiesto la risposta automatica" -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." -msgstr "" +msgstr "Modificando i parametri di chiamata..." -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "Connessione" -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" -msgstr "" +msgstr "Chiamata annullata" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" -msgstr "" +msgstr "Impossibile sospendere la chiamata" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." -msgstr "" +msgstr "Sospensione della chiamata in corso..." #: ../coreapi/misc.c:436 msgid "Stun lookup in progress..." @@ -1865,7 +1866,7 @@ msgstr "" #: ../coreapi/friend.c:68 msgid "Unknown status" -msgstr "" +msgstr "Stato sconosciuto" #: ../coreapi/proxy.c:328 msgid "" @@ -1879,7 +1880,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "L'identità sip utilizza è invalida.\nDovrebbre essere sip:username@proxydomain, esempio: sip:alice@example.net" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "impossibile login come %s" @@ -1899,7 +1900,7 @@ msgstr "" #: ../coreapi/callbacks.c:548 #, c-format msgid "Call with %s is paused." -msgstr "" +msgstr "La chiamata con %s è stata sospesa." #: ../coreapi/callbacks.c:561 #, c-format @@ -2003,7 +2004,7 @@ msgstr "" msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/ja.po b/po/ja.po index 464f34c96..5bf3b38a4 100644 --- a/po/ja.po +++ b/po/ja.po @@ -9,10 +9,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 13:49+0000\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" "Last-Translator: Belledonne Communications \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/linphone-gtk/language/ja/)\n" +"Language-Team: Japanese (http://www.transifex.com/p/linphone-gtk/language/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -129,88 +129,88 @@ msgstr "オーディオアシスタントを実行" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "%s が連絡相手にあなたを追加しようとしています。\nあなたのステータスを参照させるか、もしくは連絡先リストに追加することができます。\nあなたが拒否すると、この人は一時的にブラックリストへ登録されます。" +msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "呼出エラー" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "呼出終了" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "着信" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "応答" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "拒否" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "呼び出しの一時停止" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "%s" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "ウェブサイトリンク" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "%s (デフォルト)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "%s に転送しました" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "無料 SIP ビデオ-電話" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "" @@ -572,7 +572,7 @@ msgstr "" msgid "Error" msgstr "エラー" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "終了" @@ -778,101 +778,101 @@ msgstr "" msgid "Downloading of remote configuration from %s failed." msgstr "" -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "音声が検出できません" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "小さい" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "丁度よい" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "大きい" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "3回のビープ音が聞こえましたか?" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "音声の設定が見つかりません" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "音声制御システムを起動できません" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "キャプチャーデバイス" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "録音音量" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "音声なし" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "システムサウンド設定" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "3回分のビープ音を再生する" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "録音した音声を聞く" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "録音" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "再生" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "Linphoneをはじめる" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "音声アシスタント" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "音声アシスタント" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "マイクのゲイン測定" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "スピーカーの音量測定" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "録音して再生" @@ -1749,60 +1749,60 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "準備" -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "" -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "" #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr "と自動応答を尋ねる" -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "コールパラメーターの変更..." -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "接続しました。" -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "呼び出しを打ち切る" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "呼び出しを一時停止できませんでした" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "現在の通話を一時停止..." @@ -1878,7 +1878,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "" @@ -2002,7 +2002,7 @@ msgstr "" msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/nb_NO.po b/po/nb_NO.po index e13acf8b7..536cee0ae 100644 --- a/po/nb_NO.po +++ b/po/nb_NO.po @@ -8,10 +8,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 13:49+0000\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" "Last-Translator: Belledonne Communications \n" -"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/linphone-gtk/language/nb_NO/)\n" +"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/p/linphone-gtk/language/nb_NO/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -130,88 +130,88 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "%s vil legge deg til i hans/hennes kontaktliste.\nVil du tillate vedkommende å se din tilstedestatus eller legge vedkommende i din kontaktliste?\nHvis du svarer nei vil personen bli svartelyst midlertidig." +msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "Samtale avsluttet" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Innkommende samtale" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Svarer" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Avvis" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "Peker til nettsted" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "%s (Standard)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "Vi er overført til %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "Klarte ikke å finne noe lydkort på denne datamaskinen.\nDu vil ikke kunne sende eller motta lydsamtaler." -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "En gratis SIP video-telefon" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "" @@ -574,7 +574,7 @@ msgstr "" msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "" @@ -780,101 +780,101 @@ msgstr "" msgid "Downloading of remote configuration from %s failed." msgstr "" -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "" @@ -1751,60 +1751,60 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Klar" -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "Ser etter telefonnummer for destinasjonen..." -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "Kan ikke tilkoble dette nummeret." #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "Tilknytter" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "Kunne ikke ringe" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Beklager, du har nådd maksimalt antall samtidige samtaler" -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "Kontakter deg." -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr " og ba om autosvar." -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "Endrer ringeparametre..." -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "Tilkoblet" -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "Samtale avbrutt" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "Kunne ikke pause samtalen" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "Pauser nåværende samtale" @@ -1880,7 +1880,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "SIP adressen du har angitt er feil. Adressen bør se ut som sip: brukernavn@domenenavn, f.eks sip:ola@eksempel.no" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "Ikke ikke logge inn som %s" @@ -2004,7 +2004,7 @@ msgstr "" msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/nl.po b/po/nl.po index 6923d9ce3..5f549477f 100644 --- a/po/nl.po +++ b/po/nl.po @@ -8,10 +8,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 13:49+0000\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" "Last-Translator: Belledonne Communications \n" -"Language-Team: Dutch (http://www.transifex.com/projects/p/linphone-gtk/language/nl/)\n" +"Language-Team: Dutch (http://www.transifex.com/p/linphone-gtk/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -130,88 +130,88 @@ msgstr "Doorloop de audio-instelwizard" msgid "Run self test and exit 0 if succeed" msgstr "Draai een zelftest en exit 0 wanneer succesvol" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "%s wil u toevoegen aan zijn/haar contactpersonenlijst.\nWilt u toestaan dat hij/zij uw aanwezigheidsstatus ziet of hem/haar toevoegen aan uw contactpersonenljst?\nIndien u nee antwoordt, zal deze persoon tijdelijk op de zwarte lijst worden gezet." +msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "Vul uw wachtwoord in voor gebruikersnaam %s\nop realm %s" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "Oproepfout" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "Oproep beëindigd" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Inkomende oproep" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Opnemen" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Weigeren" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "Oproep gepauzeerd" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "door %s" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s stelt u voor om video in te schakelen. Wilt u dit accepteren?" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "Websitelink" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "%s (Standaard)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "We zijn overgeschakeld naar %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "Er zijn geluidskaarten aangetroffen op deze computer.\nU zult niet in staat zijn om audio-oproepen te ontvangen of versturen." -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "Een gratis SIP-videotelefoon" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "" @@ -574,7 +574,7 @@ msgstr "" msgid "Error" msgstr "Fout" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "Bezig met vernietigen" @@ -780,101 +780,101 @@ msgstr "bezig met ophalen van %s" msgid "Downloading of remote configuration from %s failed." msgstr "Het downloaden van de externe configuratie van %s is mislukt." -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "Er is geen stem gedetecteerd" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "Te zacht" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "Goed" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "Te hard" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "Heeft u drie pieptonen gehoord?" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "De geluidsvoorkeuren zijn niet gevonden" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "Het systeemgeluidspaneel kon niet worden gestart" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "Welkom!\nDeze instelwizard zal u begeleiden bij het instellen van de audio-instellingen van Linphone" -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "Opname-apparaat" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "Opgenomen volume" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "Geen stem" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "Systeemgeluidsinstellingen" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "Afspeelapparaat" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "Drie pieptonen afspelen" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "Klik op de opnameknop en zeg enkele woorden" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "Luister naar uw opgenomen stem" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "Opnemen" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "Afspelen" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "Laten we nu Linphone opstarten" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "Audio-instelwizard" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "Audio-instelwizard" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "Kalibratie van het microfoonbereik" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "Kalibratie van het luidsprekervolume" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "Opnemen en afspelen" @@ -1751,60 +1751,60 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Gereed." -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "Zoekt de lokatie van het telefoonnummer..." -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "Kon dit nummer niet vinden." #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "Verbinden" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "Verbonden." -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "" @@ -1880,7 +1880,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "" @@ -2004,7 +2004,7 @@ msgstr "" msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/pl.po b/po/pl.po index 1fc8efa06..e55db2c35 100644 --- a/po/pl.po +++ b/po/pl.po @@ -7,10 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 13:49+0000\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" "Last-Translator: Belledonne Communications \n" -"Language-Team: Polish (http://www.transifex.com/projects/p/linphone-gtk/language/pl/)\n" +"Language-Team: Polish (http://www.transifex.com/p/linphone-gtk/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -131,88 +131,88 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "" @@ -576,7 +576,7 @@ msgstr "" msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "" @@ -782,101 +782,101 @@ msgstr "" msgid "Downloading of remote configuration from %s failed." msgstr "" -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "" @@ -1753,60 +1753,60 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "" -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "" -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "" #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "Połączony" -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "" @@ -1882,7 +1882,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "" @@ -2006,7 +2006,7 @@ msgstr "" msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/pt_BR.po b/po/pt_BR.po index 2e0a99014..c5b67d577 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -7,10 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 13:49+0000\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" "Last-Translator: Belledonne Communications \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/linphone-gtk/language/pt_BR/)\n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/p/linphone-gtk/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -129,88 +129,88 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Camadas recebidas" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "" @@ -573,7 +573,7 @@ msgstr "" msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "" @@ -779,101 +779,101 @@ msgstr "" msgid "Downloading of remote configuration from %s failed." msgstr "" -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "" @@ -1750,60 +1750,60 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "" -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "Procurando por telefone de destino..." -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "Não foi possível encontrar este número." #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "Conectado." -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "" @@ -1879,7 +1879,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "" @@ -2003,7 +2003,7 @@ msgstr "" msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/ru.po b/po/ru.po index e843177b5..8b8d0385e 100644 --- a/po/ru.po +++ b/po/ru.po @@ -12,10 +12,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 22:09+0000\n" -"Last-Translator: AlexL \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/linphone-gtk/language/ru/)\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: Russian (http://www.transifex.com/p/linphone-gtk/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -138,88 +138,88 @@ msgstr "Запустить помощника аудио" msgid "Run self test and exit 0 if succeed" msgstr "Запустить самотест и выйти при успехе со статусом 0" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "%s вы бы хотели быть добавленным в этот контактный лист.\nВы разрешаете ему(ей) видеть ваш статус присутствия или добавить в контактный лист?\nЕсли вы ответите Нет, эта персона будет временно в чёрном списке." +msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "Пожалуйста, введите пароль для пользователя %s\n для реалм (рилм) %s:" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "Ошибка звонка" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "Звонок окончен" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Входящий звонок" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Ответ" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Отклонить" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "Звонок приостановлен" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "%s" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s предложил запустить видео. Вы принимаете?" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "Домашняя страница" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "Видео интернет телефон" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "%s (по умолчанию)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "Мы передали в %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "Звуковые карты не были обнаружены на этом компьютере.\nВы не сможете отправлять или получать аудио звонки." -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "Свободный SIP видео-телефон" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "Привет\n" @@ -584,7 +584,7 @@ msgstr "Проверка действительности учётной зап msgid "Error" msgstr "Ошибка" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "Прерывание" @@ -790,101 +790,101 @@ msgstr "получение от %s" msgid "Downloading of remote configuration from %s failed." msgstr "Загрузка удалённой конфигурации из %s неудачна." -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "Голос не обнаружен" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "Слишком тихо" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "Хорошо" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "Слишком громко" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "Вы слышали 3 сигнала?" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "Настройки звука не найдены" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "Не удаётся запустить системное управление звуком" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "Добро пожаловать!\nЭтот ассистент поможет вам настроить настройки аудио для Linphone." -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "Устройство захвата" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "Уровень записи" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "Нет голоса" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "Системные настройки звука" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "Устройство воспроизведения" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "Проиграть три сигнала" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "Нажмите кнопку записи и скажите несколько слов" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "Прослушайте ваш записанный голос" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "Запись" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "Воспроизведение" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "Давайте сейчас запустим linphone" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "Помощник аудио" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "Помощник аудио" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "Калибровка усиления микрофона" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "Калибровка громкости динамика" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "Записать и проиграть" @@ -1761,60 +1761,60 @@ msgstr "Конфигурирование..." msgid "Please wait while fetching configuration from server..." msgstr "Пожалуйста, подождите пока получается конфигурация с сервера..." -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Готов" -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "Конфигурирование" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "Поиск назначения для телефонного номера.." -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "Не получилось принять решение по этому номеру." #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "Соединение" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "Невозможно позвонить" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "К сожалению, мы достигли максимального количества одновременных звонков" -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "контактирует с вами" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr "и спросил автоматический ответ." -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "Изменение параметров звонка..." -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "Соединён." -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "Звонок отменён" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "Невозможно приостановить звонок" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "Приостановка текущего звонка..." @@ -1890,7 +1890,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "Неверные параметры для sip идентификации\nДолжно выглядеть как sip:имя_пользователя@домен_прокси, как например, sip:alice@example.net" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "Невозможно зайти как: %s" @@ -2014,7 +2014,7 @@ msgstr "Маркер проверки подлинности: %s" msgid "Call parameters were successfully modified." msgstr "Параметры звонка были успешно изменены." -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/sr.po b/po/sr.po index d6c72d8fd..adeac6fac 100644 --- a/po/sr.po +++ b/po/sr.po @@ -8,10 +8,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 13:49+0000\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" "Last-Translator: Belledonne Communications \n" -"Language-Team: Serbian (http://www.transifex.com/projects/p/linphone-gtk/language/sr/)\n" +"Language-Team: Serbian (http://www.transifex.com/p/linphone-gtk/language/sr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -132,88 +132,88 @@ msgstr "Покреће помоћника звука" msgid "Run self test and exit 0 if succeed" msgstr "Покреће самоиспробавање и излази 0 ако је успешно" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "%s жели да вас дода на списак пријатеља.\nДа ли желите да му допустите да види ваше стање присуства или да га додате на ваш списак пријатеља ?\nАко одговорите са не, ова особа ће привремено бити стављена на списак забрана." +msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "Унесите вашу лозинку за корисничко име %s\n на подручју %s:" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "Грешка позива" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "Позив је завршен" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Долазни позив" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Јави се" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Одбиј" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "Позив је заустављен" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "од %s" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s предлаже да започнете видео. Да ли прихватате ?" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "Веза веб сајта" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Линфон" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "%s (основно)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "Преселили смо се на %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "Ниједна звучна картица није откривена на овом рачунару.\nНећете бити у могућности да шаљете или да примате звучне позиве." -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "Слободан СИП телефон са снимком" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "" @@ -577,7 +577,7 @@ msgstr "" msgid "Error" msgstr "Грешка" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "Завршавам" @@ -783,101 +783,101 @@ msgstr "довлачим са „%s“" msgid "Downloading of remote configuration from %s failed." msgstr "Преузимање удаљеног подешавања са „%s“ није успело." -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "Глас није откривен" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "Сувише низак" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "Добар" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "Сувише гласан" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "Да ли сте чули три писка ?" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "Нисам пронашао поставке звука " -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "Не могу да покренем управљање звуком система " -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "Добро дошли!\nОвај помоћник ће вам помоћи да подесите поставке звука за Линфон" -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "Уређај за снимање" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "Снимљени волумен" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "Нема гласа" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "Поставке звука система" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "Уређај за пуштање" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "Пусти три писка" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "Притисните дугме за снимање и реците нешто" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "Слушајте ваш снимљени глас" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "Сними" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "Пусти" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "Хајде сада да покренемо Линфон" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "Помоћник звука" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "Помоћник звука" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "Дотеривање појачања микрофона" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "Дотеривање јачине звука звучника" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "Снимите и пустите" @@ -1754,60 +1754,60 @@ msgstr "Подешавам..." msgid "Please wait while fetching configuration from server..." msgstr "Сачекајте док довучем подешавања са сервера..." -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Спреман" -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "Подешавам" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "Тражим одредиште телефонског броја..." -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "Не могу да решим овај број." #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "Ступам у везу" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "Не могу да позовем" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Извините, достигли смо највећи број истовремених позива" -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "вам се обраћа" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr " и затражени само-одговор." -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "Мењам параметре позива..." -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "Повезан сам." -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "Позив је прекинут" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "Не могу да зауставим позив" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "Заустављам тренутни позив..." @@ -1883,7 +1883,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "Сип идентитет који сте унели није исправан.\nТреба да изгледа као „sip:корисник@домен-посредника, као што је „sip:alice@example.net“" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "Не могу да се пријавим као %s" @@ -2007,7 +2007,7 @@ msgstr "Симбол потврђивања идентитета је „%s“" msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/sv.po b/po/sv.po index 5eb3949b4..0f79d5bdc 100644 --- a/po/sv.po +++ b/po/sv.po @@ -7,10 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 13:49+0000\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" "Last-Translator: Belledonne Communications \n" -"Language-Team: Swedish (http://www.transifex.com/projects/p/linphone-gtk/language/sv/)\n" +"Language-Team: Swedish (http://www.transifex.com/p/linphone-gtk/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -129,88 +129,88 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "%s skulle vilja lägga till dig till hans/hennes kontaktlista.\nVill du tillåta honom/henne att se din närvarostatus eller lägga till honom/henne till din kontaktlista?\nOm du svarar nej, personen kommer att vara bannlyst." +msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "Samtalet slut" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Inkommande samtal" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Avböj" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "Webbsajt" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "%s (Default)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "En gratis SIP video-telefon" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "" @@ -573,7 +573,7 @@ msgstr "" msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "" @@ -779,101 +779,101 @@ msgstr "" msgid "Downloading of remote configuration from %s failed." msgstr "" -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "" @@ -1750,60 +1750,60 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Redo" -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "Leta efter telefonnummer för destinationen..." -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "Kan inte nå dett nummer." #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "Kontaktar" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "Kopplad" -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "" @@ -1879,7 +1879,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "SIP adressen som du matade in är inte rätt. Adressen borde se ut som sip:namn@domän, såsom sip:peter@exempel.se" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "Kunde inte logga in som %s" @@ -2003,7 +2003,7 @@ msgstr "" msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/tr.po b/po/tr.po index 409c145d5..b8e7f91f7 100644 --- a/po/tr.po +++ b/po/tr.po @@ -8,10 +8,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 13:49+0000\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" "Last-Translator: Belledonne Communications \n" -"Language-Team: Turkish (http://www.transifex.com/projects/p/linphone-gtk/language/tr/)\n" +"Language-Team: Turkish (http://www.transifex.com/p/linphone-gtk/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -130,88 +130,88 @@ msgstr "Ses yardımcısını çalıştır" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "Çağrı yanlış" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "Çağrı sonlandırıldı" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Gelen çağrı" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Yanıt" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Reddet" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "Çağrı duraklatıldı" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "İnternet " -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "Görüntülü internet telefonu" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "Özgür bir SİP görüntülü-telefon" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "Merhaba\n" @@ -574,7 +574,7 @@ msgstr "" msgid "Error" msgstr "Hata" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "Sonlandırma" @@ -780,101 +780,101 @@ msgstr "" msgid "Downloading of remote configuration from %s failed." msgstr "" -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "Ses olmadığı algılandı" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "Çok düşük" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "İyi" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "Çok yüksek" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "Üç bip sesi duydun mu?" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "Ses tercihleri bulunamadı" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "Ses kontrol sistemi başlatılamıyor" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "Hoşgeldiniz!\nBu yardımcı,Linphone'un ses ayarlarını yapılandırmanıza yardım edecek" -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "Görüntü yakalama aygıtı" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "Ses yok" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "Sistem ses tercihleri" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "Oynatma aygıtı" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "Üç bip sesi çal" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "Kayıt tuşuna bas ve bazı kelimeler söyle" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "Kaydettiğin sesi dinle" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "Kayıt" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "Çalma" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "Ses Yardımcısı" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "Ses yardımcısı" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "Kaydet ve Oynat" @@ -1751,60 +1751,60 @@ msgstr "Yapılandırılıyor..." msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Hazır" -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "Yapılandırılıyor" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "" -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "" #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "Bağlanıyor" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "Bağlandı." -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "Çağrı iptal edildi" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "" @@ -1880,7 +1880,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "" @@ -2004,7 +2004,7 @@ msgstr "" msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/zh_CN.po b/po/zh_CN.po index 1021ccb31..b1d4792b6 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -7,10 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 13:49+0000\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" "Last-Translator: Belledonne Communications \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/linphone-gtk/language/zh_CN/)\n" +"Language-Team: Chinese (China) (http://www.transifex.com/p/linphone-gtk/language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -127,88 +127,88 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "%s 想加您为联系人。\n您是否允许他看到您的在线状态或者将它加为您的联系人允许?\n如果您回答否,则会将该人临时性的放入黑名单" +msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "呼叫结束" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "呼入" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "拒绝" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "网站" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "%s (默认)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "未在此计算机上检测到声卡。\n您无法发送或接收音频呼叫。" -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "免费的 SIP 视频电话" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "" @@ -570,7 +570,7 @@ msgstr "" msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "" @@ -776,101 +776,101 @@ msgstr "" msgid "Downloading of remote configuration from %s failed." msgstr "" -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "" @@ -1747,60 +1747,60 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "就绪" -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "查询电话号码目的地..." -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "该号码无法解析。" #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "联系中" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "正在联系您" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr " 并询问了自动回答。" -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "已连接。" -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "" @@ -1876,7 +1876,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "您输入的地址无效。\n它应具有“sip:用户名@代理域”的形式,例如 sip:alice@example.net" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "无法登录为 %s" @@ -2000,7 +2000,7 @@ msgstr "" msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/zh_TW.po b/po/zh_TW.po index 80dbb92c0..8902365b7 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -7,10 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-26 15:49+0200\n" -"PO-Revision-Date: 2015-06-26 13:49+0000\n" +"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"PO-Revision-Date: 2015-07-17 07:34+0000\n" "Last-Translator: Belledonne Communications \n" -"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/linphone-gtk/language/zh_TW/)\n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/p/linphone-gtk/language/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -127,88 +127,88 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1082 +#: ../gtk/main.c:1078 #, c-format msgid "" -"%s would like to add you to his contact list.\n" -"Would you allow him to see your presence status or add him to your contact list ?\n" +"%s would like to add you to his/her contact list.\n" +"Would you add him/her to your contact list and allow him/her to see your presence status?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "%s 想要加您加入他的連絡人清單。\n您是否要允許他看見您的上線狀態或將他加入您的連絡人清單?\n如果您回答否,這個人會被暫時列入黑名單。" +msgstr "" -#: ../gtk/main.c:1159 +#: ../gtk/main.c:1155 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1280 +#: ../gtk/main.c:1276 msgid "Call error" msgstr "" -#: ../gtk/main.c:1283 ../coreapi/linphonecore.c:3909 +#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 msgid "Call ended" msgstr "通話已結束" -#: ../gtk/main.c:1286 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "來電" -#: ../gtk/main.c:1288 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "接聽" -#: ../gtk/main.c:1290 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 msgid "Decline" msgstr "拒接" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1296 +#: ../gtk/main.c:1292 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1366 +#: ../gtk/main.c:1362 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1521 +#: ../gtk/main.c:1517 msgid "Website link" msgstr "網站連結" -#: ../gtk/main.c:1580 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1581 +#: ../gtk/main.c:1577 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1640 +#: ../gtk/main.c:1636 #, c-format msgid "%s (Default)" msgstr "%s (預設值)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 #, c-format msgid "We are transferred to %s" msgstr "我們被轉接到 %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1984 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "在這臺電腦中偵測不到音效卡。\n您將無法傳送或接收語音電話。" -#: ../gtk/main.c:2120 +#: ../gtk/main.c:2116 msgid "A free SIP video-phone" msgstr "自由的 SIP 視訊電話" -#: ../gtk/main.c:2229 +#: ../gtk/main.c:2225 #, c-format msgid "Hello\n" msgstr "" @@ -570,7 +570,7 @@ msgstr "" msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "" @@ -776,101 +776,101 @@ msgstr "" msgid "Downloading of remote configuration from %s failed." msgstr "" -#: ../gtk/audio_assistant.c:98 +#: ../gtk/audio_assistant.c:103 msgid "No voice detected" msgstr "" -#: ../gtk/audio_assistant.c:99 +#: ../gtk/audio_assistant.c:104 msgid "Too low" msgstr "" -#: ../gtk/audio_assistant.c:100 +#: ../gtk/audio_assistant.c:105 msgid "Good" msgstr "" -#: ../gtk/audio_assistant.c:101 +#: ../gtk/audio_assistant.c:106 msgid "Too loud" msgstr "" -#: ../gtk/audio_assistant.c:183 +#: ../gtk/audio_assistant.c:188 msgid "Did you hear three beeps ?" msgstr "" -#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 +#: ../gtk/audio_assistant.c:299 ../gtk/audio_assistant.c:304 msgid "Sound preferences not found " msgstr "" -#: ../gtk/audio_assistant.c:306 +#: ../gtk/audio_assistant.c:313 msgid "Cannot launch system sound control " msgstr "" -#: ../gtk/audio_assistant.c:318 +#: ../gtk/audio_assistant.c:325 msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -#: ../gtk/audio_assistant.c:328 +#: ../gtk/audio_assistant.c:335 msgid "Capture device" msgstr "" -#: ../gtk/audio_assistant.c:329 +#: ../gtk/audio_assistant.c:336 msgid "Recorded volume" msgstr "" -#: ../gtk/audio_assistant.c:333 +#: ../gtk/audio_assistant.c:340 msgid "No voice" msgstr "" -#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373 +#: ../gtk/audio_assistant.c:341 ../gtk/audio_assistant.c:380 msgid "System sound preferences" msgstr "" -#: ../gtk/audio_assistant.c:369 +#: ../gtk/audio_assistant.c:376 msgid "Playback device" msgstr "" -#: ../gtk/audio_assistant.c:370 +#: ../gtk/audio_assistant.c:377 msgid "Play three beeps" msgstr "" -#: ../gtk/audio_assistant.c:403 +#: ../gtk/audio_assistant.c:410 msgid "Press the record button and say some words" msgstr "" -#: ../gtk/audio_assistant.c:404 +#: ../gtk/audio_assistant.c:411 msgid "Listen to your record voice" msgstr "" -#: ../gtk/audio_assistant.c:405 +#: ../gtk/audio_assistant.c:412 msgid "Record" msgstr "" -#: ../gtk/audio_assistant.c:406 +#: ../gtk/audio_assistant.c:413 msgid "Play" msgstr "" -#: ../gtk/audio_assistant.c:433 +#: ../gtk/audio_assistant.c:440 msgid "Let's start Linphone now" msgstr "" -#: ../gtk/audio_assistant.c:503 +#: ../gtk/audio_assistant.c:510 msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 msgid "Audio assistant" msgstr "" -#: ../gtk/audio_assistant.c:518 +#: ../gtk/audio_assistant.c:525 msgid "Mic Gain calibration" msgstr "" -#: ../gtk/audio_assistant.c:524 +#: ../gtk/audio_assistant.c:531 msgid "Speaker volume calibration" msgstr "" -#: ../gtk/audio_assistant.c:529 +#: ../gtk/audio_assistant.c:536 msgid "Record and Play" msgstr "" @@ -1747,60 +1747,60 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1567 +#: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "準備就緒" -#: ../coreapi/linphonecore.c:2583 +#: ../coreapi/linphonecore.c:2413 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2757 +#: ../coreapi/linphonecore.c:2587 msgid "Looking for telephone number destination..." msgstr "尋找電話號碼目的端..." -#: ../coreapi/linphonecore.c:2759 +#: ../coreapi/linphonecore.c:2589 msgid "Could not resolve this number." msgstr "無法解析這個號碼。" #. must be known at that time -#: ../coreapi/linphonecore.c:3045 +#: ../coreapi/linphonecore.c:2875 msgid "Contacting" msgstr "正在連絡" -#: ../coreapi/linphonecore.c:3050 +#: ../coreapi/linphonecore.c:2880 msgid "Could not call" msgstr "無法通話" -#: ../coreapi/linphonecore.c:3201 +#: ../coreapi/linphonecore.c:3031 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "抱歉,我們已達瀏同步通話的最大數目" -#: ../coreapi/linphonecore.c:3359 +#: ../coreapi/linphonecore.c:3189 msgid "is contacting you" msgstr "正在連絡您" -#: ../coreapi/linphonecore.c:3360 +#: ../coreapi/linphonecore.c:3190 msgid " and asked autoanswer." msgstr "並要求自動接聽。" -#: ../coreapi/linphonecore.c:3486 +#: ../coreapi/linphonecore.c:3316 msgid "Modifying call parameters..." msgstr "修改通話參數..." -#: ../coreapi/linphonecore.c:3865 +#: ../coreapi/linphonecore.c:3695 msgid "Connected." msgstr "已連線。" -#: ../coreapi/linphonecore.c:3890 +#: ../coreapi/linphonecore.c:3720 msgid "Call aborted" msgstr "通話已放棄" -#: ../coreapi/linphonecore.c:4087 +#: ../coreapi/linphonecore.c:3917 msgid "Could not pause the call" msgstr "無法暫停通話" -#: ../coreapi/linphonecore.c:4090 +#: ../coreapi/linphonecore.c:3920 msgid "Pausing the current call..." msgstr "暫停目前的通話..." @@ -1876,7 +1876,7 @@ msgid "" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "您輸入的 sip 身分是無效的。\n它應該看起來像 sip:使用者名稱@代理網域,像是 sip:alice@example.net" -#: ../coreapi/proxy.c:1427 +#: ../coreapi/proxy.c:1420 #, c-format msgid "Could not login as %s" msgstr "無法以 %s 登入" @@ -2000,7 +2000,7 @@ msgstr "" msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3822 +#: ../coreapi/linphonecall.c:3826 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/tester/call_tester.c b/tester/call_tester.c index e9846df09..62af4d283 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -363,7 +363,6 @@ void simple_call_base(bool_t enable_multicast_recv_side) { const LinphoneAddress *from; LinphoneCall *pauline_call; LinphoneProxyConfig* marie_cfg; - const char* marie_id = NULL; belle_sip_object_enable_leak_detector(TRUE); begin=belle_sip_object_get_object_count(); @@ -373,9 +372,8 @@ void simple_call_base(bool_t enable_multicast_recv_side) { /* with the account manager, we might lose the identity */ marie_cfg = linphone_core_get_default_proxy_config(marie->lc); - marie_id = linphone_proxy_config_get_identity(marie_cfg); { - LinphoneAddress* marie_addr = linphone_address_new(marie_id); + LinphoneAddress* marie_addr = linphone_address_clone(linphone_proxy_config_get_identity_address(marie_cfg)); char* marie_tmp_id = NULL; linphone_address_set_display_name(marie_addr, "Super Marie"); marie_tmp_id = linphone_address_as_string(marie_addr); @@ -385,7 +383,7 @@ void simple_call_base(bool_t enable_multicast_recv_side) { linphone_proxy_config_done(marie_cfg); ms_free(marie_tmp_id); - linphone_address_unref(marie_addr); + linphone_address_destroy(marie_addr); } linphone_core_enable_audio_multicast(pauline->lc,enable_multicast_recv_side); @@ -695,14 +693,14 @@ static void simple_call_compatibility_mode(void) { stats* stat_marie=&marie->stat; stats* stat_pauline=&pauline->stat; LinphoneProxyConfig* proxy; - LinphoneAddress* identity; + const LinphoneAddress* identity; LinphoneAddress* proxy_address; char*tmp; LCSipTransports transport; linphone_core_get_default_proxy(lc_marie,&proxy); BC_ASSERT_PTR_NOT_NULL (proxy); - identity = linphone_address_new(linphone_proxy_config_get_identity(proxy)); + identity = linphone_proxy_config_get_identity_address(proxy); proxy_address=linphone_address_new(linphone_proxy_config_get_addr(proxy)); @@ -733,7 +731,6 @@ static void simple_call_compatibility_mode(void) { BC_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call_remote_address(lc_pauline)); if (linphone_core_get_current_call_remote_address(lc_pauline)) { BC_ASSERT_TRUE(linphone_address_weak_equal(identity,linphone_core_get_current_call_remote_address(lc_pauline))); - linphone_address_destroy(identity); linphone_core_accept_call(lc_pauline,linphone_core_get_current_call(lc_pauline)); @@ -2314,9 +2311,6 @@ static void call_with_file_player(void) { /*make sure the record file doesn't already exists, otherwise this test will append new samples to it*/ unlink(recordpath); - // inter-correlation is very sensitive to variable offset when comparing files, so using a fixed jitter - // buffer length should help it a lot. - linphone_core_enable_audio_adaptive_jittcomp(pauline->lc, FALSE); /*caller uses files instead of soundcard in order to avoid mixing soundcard input with file played using call's player*/ linphone_core_use_files(marie->lc,TRUE); @@ -2832,17 +2826,15 @@ static void call_established_with_complex_rejected_operation(void) { linphone_call_send_info_message(linphone_core_get_current_call(marie->lc),linphone_core_create_info_message(marie->lc)); - /*by chance, UPDATES can be sent in // to invite, but drawback is that it will not be rejected with 491*/ params=linphone_core_create_call_params(marie->lc,linphone_core_get_current_call(marie->lc)); - params->no_user_consent=TRUE; + sal_enable_pending_trans_checking(marie->lc->sal,FALSE); /*to allow // transactions*/ + linphone_core_enable_payload_type(marie->lc,linphone_core_find_payload_type(marie->lc,"PCMU",8000,1),TRUE); + linphone_core_enable_payload_type(marie->lc,linphone_core_find_payload_type(marie->lc,"PCMA",8000,1),FALSE); + linphone_core_update_call( marie->lc ,linphone_core_get_current_call(marie->lc) ,params); - - - - linphone_call_params_destroy(params); BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,3)); @@ -2862,6 +2854,58 @@ static void call_established_with_complex_rejected_operation(void) { linphone_core_manager_destroy(pauline); } +static void call_established_with_rejected_info_during_reinvite(void) { + + LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); + bool_t call_ok=FALSE; + + BC_ASSERT_TRUE((call_ok=call(pauline,marie))); + if (call_ok){ + + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,1)); + + linphone_core_enable_payload_type(pauline->lc,linphone_core_find_payload_type(pauline->lc,"PCMU",8000,1),FALSE); /*disable PCMU*/ + linphone_core_enable_payload_type(pauline->lc,linphone_core_find_payload_type(pauline->lc,"PCMA",8000,1),TRUE); /*enable PCMA*/ + linphone_core_enable_payload_type(marie->lc,linphone_core_find_payload_type(marie->lc,"PCMU",8000,1),FALSE); /*disable PCMU*/ + linphone_core_enable_payload_type(marie->lc,linphone_core_find_payload_type(marie->lc,"PCMA",8000,1),TRUE); /*enable PCMA*/ + + /*just to authenticate marie*/ + linphone_call_send_info_message(linphone_core_get_current_call(marie->lc),linphone_core_create_info_message(marie->lc)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_inforeceived,1)); + BC_ASSERT_EQUAL(pauline->stat.number_of_inforeceived,1, int, "%d"); + /*to give time for 200ok to arrive*/ + wait_for_until(marie->lc,pauline->lc,NULL,0,1000); + + + //sal_enable_pending_trans_checking(marie->lc->sal,FALSE); /*to allow // transactions*/ + + linphone_call_send_info_message(linphone_core_get_current_call(marie->lc),linphone_core_create_info_message(marie->lc)); + + //sal_set_send_error(marie->lc->sal, -1); /*to avoid 491 pending to be sent*/ + + linphone_core_update_call( pauline->lc + ,linphone_core_get_current_call(pauline->lc) + ,linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc))); + + + + wait_for_until(pauline->lc,pauline->lc,NULL,0,2000); /*to avoid 491 pending to be sent to early*/ + + + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + + /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + } + + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); +} + static void call_established_with_rejected_reinvite(void) { LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); @@ -2990,22 +3034,32 @@ static void call_redirect(void){ } -static void call_established_with_rejected_reinvite_with_error(void) { +static void call_established_with_rejected_reinvite_with_error_base(bool_t trans_pending) { LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); bool_t call_ok=TRUE; + int result; BC_ASSERT_TRUE((call_ok=call(pauline,marie))); if (call_ok){ linphone_core_enable_payload_type(pauline->lc,linphone_core_find_payload_type(pauline->lc,"PCMA",8000,1),TRUE); /*add PCMA*/ - sal_enable_unconditional_answer(marie->lc->sal,TRUE); + if (trans_pending) { + LinphoneInfoMessage * info = linphone_core_create_info_message(pauline->lc); + linphone_call_send_info_message(linphone_core_get_current_call(pauline->lc),info); - linphone_core_update_call( pauline->lc + } else + sal_enable_unconditional_answer(marie->lc->sal,TRUE); + + result = linphone_core_update_call( pauline->lc ,linphone_core_get_current_call(pauline->lc) ,linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc))); + if (trans_pending) + BC_ASSERT_NOT_EQUAL(result,0, int, "%d"); + else + BC_ASSERT_EQUAL(result,0,int, "%d"); BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); @@ -3015,6 +3069,9 @@ static void call_established_with_rejected_reinvite_with_error(void) { check_call_state(pauline,LinphoneCallStreamsRunning); check_call_state(marie,LinphoneCallStreamsRunning); + if (!trans_pending) + sal_enable_unconditional_answer(marie->lc->sal,FALSE); + /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); @@ -3025,6 +3082,14 @@ static void call_established_with_rejected_reinvite_with_error(void) { linphone_core_manager_destroy(pauline); } +static void call_established_with_rejected_reinvite_with_error(void) { + call_established_with_rejected_reinvite_with_error_base(FALSE); +} + +static void call_established_with_rejected_reinvite_with_trans_pending_error(void) { + call_established_with_rejected_reinvite_with_error_base(TRUE); +} + static void call_rejected_because_wrong_credentials_with_params(const char* user_agent,bool_t enable_auth_req_cb) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneAuthInfo* good_auth_info=linphone_auth_info_clone(linphone_core_find_auth_info(marie->lc,NULL,linphone_address_get_username(marie->identity),NULL)); @@ -4145,10 +4210,6 @@ static void simple_stereo_call(const char *codec_name, int clock_rate, int bitra marie = linphone_core_manager_new( "marie_rc"); pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); - // inter-correlation is very sensitive to variable offset when comparing files, so using a fixed jitter - // buffer length should help it a lot. - linphone_core_enable_audio_adaptive_jittcomp(pauline->lc, FALSE); - /*make sure we have opus*/ pt = linphone_core_find_payload_type(marie->lc, codec_name, clock_rate, 2); if (!pt) { @@ -4174,14 +4235,14 @@ static void simple_stereo_call(const char *codec_name, int clock_rate, int bitra lp_config_set_string(pauline->lc->config,"sound","features","NONE"); if (!BC_ASSERT_TRUE(call(pauline,marie))) goto end; - wait_for_until(marie->lc, pauline->lc, &dummy, 1,1000); + wait_for_until(marie->lc, pauline->lc, &dummy, 1,6000); end_call(pauline, marie); if (clock_rate!=48000) { ms_warning("Similarity checking not implemented for files not having the same sampling rate"); }else{ -#if !defined(__arm__) && !defined(__arm64__) && !defined(TARGET_IPHONE_SIMULATOR) && !defined(ANDROID) +#if !defined(__arm__) && !defined(__arm64__) && !TARGET_IPHONE_SIMULATOR && !defined(ANDROID) double similar; const double threshold = .7f; BC_ASSERT_EQUAL(ms_audio_diff(stereo_file,recordpath,&similar,audio_cmp_max_shift,NULL,NULL), 0, int, "%d"); @@ -4194,6 +4255,7 @@ end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); ms_free(stereo_file); + unlink(recordpath); ms_free(recordpath); leaked_objects=belle_sip_object_get_object_count()-begin; @@ -4216,6 +4278,96 @@ static void simple_mono_call_opus(void){ simple_stereo_call("opus", 48000, 150, FALSE); } +static void call_with_fqdn_in_sdp(void) { + LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); + LpConfig *lp; + bool_t call_ok; + lp = linphone_core_get_config(marie->lc); + lp_config_set_string(lp,"rtp","bind_address","localhost"); + lp = linphone_core_get_config(pauline->lc); + lp_config_set_string(lp,"rtp","bind_address","localhost"); + + + BC_ASSERT_TRUE(call_ok=call(pauline,marie)); + if (!call_ok) goto end; + liblinphone_tester_check_rtcp(pauline,marie); + +#ifdef VIDEO_ENABLED + BC_ASSERT_TRUE(add_video(pauline,marie, TRUE)); + liblinphone_tester_check_rtcp(pauline,marie); +#endif + /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); +end: + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); +} + +static void call_with_rtp_io_mode(void) { + LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); + LinphonePlayer *player; + char *hellopath = bc_tester_res("sounds/ahbahouaismaisbon.wav"); + char *recordpath = create_filepath(bc_tester_get_writable_dir_prefix(), "record-call_with_file_player", "wav"); + bool_t call_ok; + + /* Make sure that the record file doesn't already exists, otherwise this test will append new samples to it. */ + unlink(recordpath); + + /* The caller uses files instead of soundcard in order to avoid mixing soundcard input with file played using call's player. */ + linphone_core_use_files(marie->lc, TRUE); + linphone_core_set_play_file(marie->lc, NULL); + linphone_core_set_record_file(marie->lc, recordpath); + + /* The callee uses the RTP IO mode with the PCMU codec to send back audio to the caller. */ + disable_all_audio_codecs_except_one(pauline->lc, "pcmu", -1); + lp_config_set_int(pauline->lc->config, "sound", "rtp_io", 1); + lp_config_set_string(pauline->lc->config, "sound", "rtp_local_addr", "127.0.0.1"); + lp_config_set_string(pauline->lc->config, "sound", "rtp_remote_addr", "127.0.0.1"); + lp_config_set_int(pauline->lc->config, "sound", "rtp_local_port", 17076); + lp_config_set_int(pauline->lc->config, "sound", "rtp_remote_port", 17076); + lp_config_set_string(pauline->lc->config, "sound", "rtp_map", "pcmu/8000/1"); + + BC_ASSERT_TRUE((call_ok = call(marie, pauline))); + if (!call_ok) goto end; + player = linphone_call_get_player(linphone_core_get_current_call(marie->lc)); + BC_ASSERT_PTR_NOT_NULL(player); + if (player) { + BC_ASSERT_TRUE(linphone_player_open(player, hellopath, on_eof, marie) == 0); + BC_ASSERT_TRUE(linphone_player_start(player) == 0); + } + + /* This assert should be modified to be at least as long as the WAV file */ + BC_ASSERT_TRUE(wait_for_until(pauline->lc, marie->lc, &marie->stat.number_of_player_eof, 1, 10000)); + + linphone_core_terminate_all_calls(marie->lc); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); + + if (ms_tags_list_contains_tag(ms_factory_get_platform_tags(ms_factory_get_fallback()), "embedded")) { + ms_warning("Cannot run audio diff on embedded platform"); + remove(recordpath); + } else { + double similar; + const int threshold = 90; + BC_ASSERT_EQUAL(ms_audio_diff(hellopath, recordpath, &similar, audio_cmp_max_shift, NULL, NULL), 0, int, "%d"); + BC_ASSERT_GREATER(100 * similar, threshold, int, "%d"); + BC_ASSERT_LOWER(100 * similar, 100, int, "%d"); + if ((threshold < (100 * similar)) && ((100 * similar) < 100)) { + remove(recordpath); + } + } + +end: + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); + ms_free(recordpath); + ms_free(hellopath); +} + test_t call_tests[] = { { "Early declined call", early_declined_call }, { "Call declined", call_declined }, @@ -4317,7 +4469,9 @@ test_t call_tests[] = { { "Call established with rejected RE-INVITE",call_established_with_rejected_reinvite}, { "Call established with rejected incoming RE-INVITE", call_established_with_rejected_incoming_reinvite }, { "Call established with rejected RE-INVITE in error", call_established_with_rejected_reinvite_with_error}, + { "Call established with rejected RE-INVITE with trans pending error", call_established_with_rejected_reinvite_with_trans_pending_error}, { "Call established with complex rejected operation",call_established_with_complex_rejected_operation}, + { "Call established with rejected info during re-invite",call_established_with_rejected_info_during_reinvite}, { "Call redirected by callee", call_redirect}, { "Call with specified codec bitrate", call_with_specified_codec_bitrate}, { "Call with in-dialog UPDATE request", call_with_in_dialog_update }, @@ -4338,7 +4492,9 @@ test_t call_tests[] = { { "Unsuccessful call with transport change after released",unsucessfull_call_with_transport_change_after_released}, { "Simple stereo call with L16", simple_stereo_call_l16 }, { "Simple stereo call with opus", simple_stereo_call_opus }, - { "Simple mono call with opus", simple_mono_call_opus } + { "Simple mono call with opus", simple_mono_call_opus }, + { "Call with FQDN in SDP", call_with_fqdn_in_sdp}, + { "Call with RTP IO mode", call_with_rtp_io_mode } }; test_suite_t call_test_suite = { diff --git a/tester/flexisip_tester.c b/tester/flexisip_tester.c index 7b130cba5..d210aef1f 100644 --- a/tester/flexisip_tester.c +++ b/tester/flexisip_tester.c @@ -777,7 +777,7 @@ static void file_transfer_message_rcs_to_external_body_client(void) { reset_counters(&pauline->stat); } linphone_chat_message_cbs_set_msg_state_changed(cbs,liblinphone_tester_chat_message_msg_state_changed); - linphone_chat_message_cbs_set_file_transfer_send(cbs, file_transfer_send); + linphone_chat_message_cbs_set_file_transfer_send(cbs, tester_file_transfer_send); linphone_chat_room_send_chat_message(chat_room,message); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageExtBodyReceived,1)); fclose(file_to_send); diff --git a/tester/liblinphone_tester.c b/tester/liblinphone_tester.c index 81393651d..d49c890de 100644 --- a/tester/liblinphone_tester.c +++ b/tester/liblinphone_tester.c @@ -169,7 +169,7 @@ void liblinphone_tester_uninit(void) { } -#if !defined(ANDROID) && !__ios && !(defined(LINPHONE_WINDOWS_PHONE) || defined(LINPHONE_WINDOWS_UNIVERSAL)) +#if !__ios && !(defined(LINPHONE_WINDOWS_PHONE) || defined(LINPHONE_WINDOWS_UNIVERSAL)) static const char* liblinphone_helper = "\t\t\t--verbose\n" @@ -196,6 +196,14 @@ int main (int argc, char *argv[]) liblinphone_tester_init(NULL); + if (strstr(argv[0], ".libs")) { + char res_dir[128] = {0}; + // this allows to launch liblinphone_tester from outside of tester directory + strncpy(res_dir, argv[0], strstr(argv[0], ".libs")-argv[0]); + bc_tester_set_resource_dir_prefix(res_dir); + bc_tester_set_writable_dir_prefix(res_dir); + } + for(i = 1; i < argc; ++i) { if (strcmp(argv[i], "--verbose") == 0) { linphone_core_set_log_level_mask(ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL); @@ -226,14 +234,14 @@ int main (int argc, char *argv[]) } else if (strcmp(argv[i],"--keep-recorded-files")==0){ liblinphone_tester_keep_recorded_files(TRUE); } else { - int ret = bc_tester_parse_args(argc, argv, i); - if (ret>0) { - i += ret - 1; + int bret = bc_tester_parse_args(argc, argv, i); + if (bret>0) { + i += bret - 1; continue; - } else if (ret<0) { + } else if (bret<0) { bc_tester_helper(argv[0], liblinphone_helper); } - return ret; + return bret; } } diff --git a/tester/liblinphone_tester.h b/tester/liblinphone_tester.h index b5687e002..a86666f4f 100644 --- a/tester/liblinphone_tester.h +++ b/tester/liblinphone_tester.h @@ -262,8 +262,8 @@ void notify_presence_received(LinphoneCore *lc, LinphoneFriend * lf); void text_message_received(LinphoneCore *lc, LinphoneChatRoom *room, const LinphoneAddress *from_address, const char *message); void message_received(LinphoneCore *lc, LinphoneChatRoom *room, LinphoneChatMessage* message); void file_transfer_received(LinphoneChatMessage *message, const LinphoneContent* content, const LinphoneBuffer *buffer); -LinphoneBuffer * file_transfer_send(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t size); -LinphoneBuffer * memory_file_transfer_send(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t size); +LinphoneBuffer * tester_file_transfer_send(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t size); +LinphoneBuffer * tester_memory_file_transfer_send(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t size); void file_transfer_progress_indication(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t total); void is_composing_received(LinphoneCore *lc, LinphoneChatRoom *room); void info_message_received(LinphoneCore *lc, LinphoneCall *call, const LinphoneInfoMessage *msg); diff --git a/tester/message_tester.c b/tester/message_tester.c index a491cbb86..ca623e0b3 100644 --- a/tester/message_tester.c +++ b/tester/message_tester.c @@ -91,13 +91,13 @@ char big_file[128000]; /* a buffer to simulate a big file for the file transfer /* * function called when the file transfer is initiated. file content should be feed into object LinphoneContent * */ -LinphoneBuffer * file_transfer_send(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t size){ +LinphoneBuffer * tester_file_transfer_send(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t size){ LinphoneBuffer *lb; size_t file_size; size_t size_to_send; FILE *file_to_send; uint8_t *buf; - if (size == 0) return linphone_buffer_new(); /*end of file*/ + file_to_send = linphone_chat_message_get_user_data(message); fseek(file_to_send, 0, SEEK_END); file_size = ftell(file_to_send); @@ -105,16 +105,15 @@ LinphoneBuffer * file_transfer_send(LinphoneChatMessage *message, const Linphone size_to_send = MIN(size, file_size - offset); buf = ms_malloc(size_to_send); if (fread(buf, size_to_send, 1, file_to_send)!=size_to_send){ - ms_error("fread error"); + // reaching end of file } lb = linphone_buffer_new_from_data(buf, size_to_send); ms_free(buf); return lb; } -LinphoneBuffer * memory_file_transfer_send(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t size){ +LinphoneBuffer * tester_memory_file_transfer_send(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t size){ size_t size_to_send = MIN(size, sizeof(big_file) - offset); - if (size == 0) return linphone_buffer_new(); /*end of file*/ return linphone_buffer_new_from_data((uint8_t *)big_file + offset, size_to_send); } @@ -484,7 +483,7 @@ static void file_transfer_message(void) { reset_counters(&pauline->stat); } linphone_chat_message_cbs_set_msg_state_changed(cbs,liblinphone_tester_chat_message_msg_state_changed); - linphone_chat_message_cbs_set_file_transfer_send(cbs, file_transfer_send); + linphone_chat_message_cbs_set_file_transfer_send(cbs, tester_file_transfer_send); linphone_chat_room_send_chat_message(chat_room,message); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); fclose(file_to_send); @@ -553,7 +552,7 @@ static void small_file_transfer_message(void) { } cbs = linphone_chat_message_get_callbacks(message); linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); - linphone_chat_message_cbs_set_file_transfer_send(cbs, memory_file_transfer_send); + linphone_chat_message_cbs_set_file_transfer_send(cbs, tester_memory_file_transfer_send); linphone_chat_room_send_chat_message(chat_room,message); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); if (marie->stat.last_received_chat_message ) { @@ -660,7 +659,7 @@ static void lime_file_transfer_message_base(bool_t encrypt_file) { cbs = linphone_chat_message_get_callbacks(message); linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); - linphone_chat_message_cbs_set_file_transfer_send(cbs, memory_file_transfer_send); + linphone_chat_message_cbs_set_file_transfer_send(cbs, tester_memory_file_transfer_send); linphone_chat_room_send_chat_message(chat_room,message); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); if (marie->stat.last_received_chat_message ) { @@ -957,7 +956,7 @@ static void file_transfer_message_io_error_upload(void) { } cbs = linphone_chat_message_get_callbacks(message); linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); - linphone_chat_message_cbs_set_file_transfer_send(cbs, memory_file_transfer_send); + linphone_chat_message_cbs_set_file_transfer_send(cbs, tester_memory_file_transfer_send); linphone_chat_message_cbs_set_file_transfer_progress_indication(cbs, file_transfer_progress_indication); linphone_chat_room_send_chat_message(chat_room,message); @@ -1095,7 +1094,7 @@ static void file_transfer_message_upload_cancelled(void) { } cbs = linphone_chat_message_get_callbacks(message); linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); - linphone_chat_message_cbs_set_file_transfer_send(cbs, memory_file_transfer_send); + linphone_chat_message_cbs_set_file_transfer_send(cbs, tester_memory_file_transfer_send); linphone_chat_message_cbs_set_file_transfer_progress_indication(cbs, file_transfer_progress_indication); linphone_chat_room_send_chat_message(chat_room,message); @@ -1219,7 +1218,7 @@ static void file_transfer_using_external_body_url(void) { } } -static void file_transfer_message_two_messages() { +static void file_transfer_2_messages_simultaneously() { if (transport_supported(LinphoneTransportTls)) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); char* to; @@ -1259,19 +1258,26 @@ static void file_transfer_message_two_messages() { linphone_chat_message_set_user_data(message, file_to_send); message2 = linphone_chat_room_create_file_transfer_message(pauline_room, content); linphone_chat_message_set_user_data(message2, file_to_send); + linphone_content_unref(content); + + + { + /*just to have time to purge message stored in the server*/ int dummy=0; - wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/ + wait_for_until(marie->lc,pauline->lc,&dummy,1,100); reset_counters(&marie->stat); reset_counters(&pauline->stat); } + cbs = linphone_chat_message_get_callbacks(message); linphone_chat_message_cbs_set_msg_state_changed(cbs,liblinphone_tester_chat_message_msg_state_changed); - linphone_chat_message_cbs_set_file_transfer_send(cbs, file_transfer_send); + linphone_chat_message_cbs_set_file_transfer_send(cbs, tester_file_transfer_send); cbs = linphone_chat_message_get_callbacks(message2); linphone_chat_message_cbs_set_msg_state_changed(cbs,liblinphone_tester_chat_message_msg_state_changed); - linphone_chat_message_cbs_set_file_transfer_send(cbs, file_transfer_send); + linphone_chat_message_cbs_set_file_transfer_send(cbs, tester_file_transfer_send); + BC_ASSERT_EQUAL(ms_list_size(linphone_core_get_chat_rooms(marie->lc)), 0, int, "%d"); linphone_chat_room_send_chat_message(pauline_room,message); linphone_chat_room_send_chat_message(pauline_room,message2); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); @@ -1279,8 +1285,17 @@ static void file_transfer_message_two_messages() { BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,2)); message2 = marie->stat.last_received_chat_message; fclose(file_to_send); - BC_ASSERT_EQUAL(ms_list_size(linphone_core_get_chat_rooms(marie->lc)), 1, int, "%d"); + if (ms_list_size(linphone_core_get_chat_rooms(marie->lc)) != 1) { + char * buf = ms_strdup_printf("Found %d rooms instead of 1: ", ms_list_size(linphone_core_get_chat_rooms(marie->lc))); + MSList *it = linphone_core_get_chat_rooms(marie->lc); + while (it) { + const LinphoneAddress * peer = linphone_chat_room_get_peer_address(it->data); + buf = ms_strcat_printf("%s, ", linphone_address_get_username(peer)); + it = it->next; + } + ms_error("%s", buf); + } cbs = linphone_chat_message_get_callbacks(message); linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); @@ -1299,7 +1314,6 @@ static void file_transfer_message_two_messages() { BC_ASSERT_TRUE(compare_files(send_filepath, receive_filepath)); linphone_chat_message_unref(message); - linphone_content_unref(content); linphone_core_manager_destroy(pauline); ms_free(send_filepath); ms_free(receive_filepath); @@ -1696,7 +1710,7 @@ test_t message_tests[] = { { "File transfer message upload cancelled", file_transfer_message_upload_cancelled }, { "File transfer message download cancelled", file_transfer_message_download_cancelled }, { "File transfer message using external body url", file_transfer_using_external_body_url }, - { "File transfer 2 messages simultaneously", file_transfer_message_two_messages }, + { "File transfer 2 messages simultaneously", file_transfer_2_messages_simultaneously }, { "Text message denied", text_message_denied }, { "Info message", info_message }, { "Info message with body", info_message_with_body }, diff --git a/tester/proxy_config_tester.c b/tester/proxy_config_tester.c index fe8b3cef8..29a169557 100644 --- a/tester/proxy_config_tester.c +++ b/tester/proxy_config_tester.c @@ -78,10 +78,26 @@ static void phone_normalization_with_dial_escape_plus(void){ linphone_proxy_config_destroy(proxy); } +#define SIP_URI_CHECK(actual, expected) { \ + LinphoneAddress* res = linphone_proxy_config_normalize_sip_uri(NULL, actual); \ + char* actual_str = linphone_address_as_string_uri_only(res); \ + BC_ASSERT_STRING_EQUAL(actual_str, expected); \ + ms_free(actual_str); \ + linphone_address_destroy(res); \ + } + + +static void sip_uri_normalization(void) { + BC_ASSERT_PTR_NULL(linphone_proxy_config_normalize_sip_uri(NULL, "test")); + SIP_URI_CHECK("test@linphone.org", "sip:test@linphone.org"); + SIP_URI_CHECK("test@linphone.org;transport=tls", "sip:test@linphone.org;transport=tls"); +} + test_t proxy_config_tests[] = { { "Phone normalization without proxy", phone_normalization_without_proxy }, { "Phone normalization with proxy", phone_normalization_with_proxy }, { "Phone normalization with dial escape plus", phone_normalization_with_dial_escape_plus }, + { "SIP URI normalization", sip_uri_normalization }, }; test_suite_t proxy_config_test_suite = { diff --git a/tester/quality_reporting_tester.c b/tester/quality_reporting_tester.c index dc4e58f9c..038d823ca 100644 --- a/tester/quality_reporting_tester.c +++ b/tester/quality_reporting_tester.c @@ -170,6 +170,8 @@ static void quality_reporting_not_sent_if_call_not_started() { linphone_core_set_max_calls(pauline->lc,0); out_call = linphone_core_invite(marie->lc,"pauline"); + BC_ASSERT_PTR_NOT_NULL(out_call); + if(out_call == NULL) goto end; linphone_call_ref(out_call); BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallError,1, 10000)); @@ -189,6 +191,7 @@ static void quality_reporting_not_sent_if_call_not_started() { BC_ASSERT_EQUAL(marie->stat.number_of_LinphonePublishProgress,0, int, "%d"); BC_ASSERT_EQUAL(marie->stat.number_of_LinphonePublishOk,0, int, "%d"); +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } diff --git a/tester/register_tester.c b/tester/register_tester.c index 6d0be9400..c2f883bd9 100644 --- a/tester/register_tester.c +++ b/tester/register_tester.c @@ -680,7 +680,7 @@ static void io_recv_error_retry_immediatly(){ BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0,int,"%d"); sal_set_recv_error(lc->sal, 1); /*reset*/ - BC_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_LinphoneRegistrationOk,register_ok-number_of_udp_proxy+register_ok)); + BC_ASSERT_TRUE(wait_for_until(lc,lc,&counters->number_of_LinphoneRegistrationOk,register_ok-number_of_udp_proxy+register_ok,30000)); linphone_core_manager_destroy(lcm); } diff --git a/tester/sounds/vrroom.wav b/tester/sounds/vrroom.wav index 92a73d289..673a3addc 100644 Binary files a/tester/sounds/vrroom.wav and b/tester/sounds/vrroom.wav differ diff --git a/tester/tester.c b/tester/tester.c index a42eabf76..b3ffddec0 100644 --- a/tester/tester.c +++ b/tester/tester.c @@ -240,6 +240,7 @@ bool_t transport_supported(LinphoneTransportType transport) { LinphoneCoreManager* linphone_core_manager_init(const char* rc_file) { LinphoneCoreManager* mgr= ms_new0(LinphoneCoreManager,1); char *rc_path = NULL; + char *hellopath = bc_tester_res("sounds/hello8000.wav"); mgr->number_of_cunit_error_at_creation = CU_get_number_of_failures(); mgr->v_table.registration_state_changed=registration_state_changed; mgr->v_table.auth_info_requested=auth_info_requested; @@ -289,16 +290,17 @@ LinphoneCoreManager* linphone_core_manager_init(const char* rc_file) { #endif + linphone_core_set_play_file(mgr->lc,hellopath); /*is also used when in pause*/ + ms_free(hellopath); + if( manager_count >= 2){ - char *hellopath = bc_tester_res("sounds/hello8000.wav"); char *recordpath = ms_strdup_printf("%s/record_for_lc_%p.wav",bc_tester_get_writable_dir_prefix(),mgr->lc); ms_message("Manager for '%s' using files", rc_file ? rc_file : "--"); linphone_core_set_use_files(mgr->lc, TRUE); - linphone_core_set_play_file(mgr->lc,hellopath); linphone_core_set_record_file(mgr->lc,recordpath); ms_free(recordpath); - ms_free(hellopath); } + linphone_core_set_user_certificates_path(mgr->lc,bc_tester_get_writable_dir_prefix()); if (rc_path) ms_free(rc_path); @@ -329,7 +331,7 @@ void linphone_core_manager_start(LinphoneCoreManager *mgr, const char* rc_file, linphone_core_get_default_proxy(mgr->lc,&proxy); if (proxy) { - mgr->identity = linphone_address_new(linphone_proxy_config_get_identity(proxy)); + mgr->identity = linphone_address_clone(linphone_proxy_config_get_identity_address(proxy)); linphone_address_clean(mgr->identity); } } diff --git a/tester/tunnel_tester.c b/tester/tunnel_tester.c index 98a28e7c1..425247eb8 100644 --- a/tester/tunnel_tester.c +++ b/tester/tunnel_tester.c @@ -46,15 +46,9 @@ static const char* get_ip_from_hostname(const char * tunnel_hostname){ return output; } static char* get_public_contact_ip(LinphoneCore* lc) { - long contact_host_ip_len; - char contact_host_ip[255]; - char * contact = linphone_proxy_config_get_contact(linphone_core_get_default_proxy_config(lc)); + const LinphoneAddress * contact = linphone_proxy_config_get_contact(linphone_core_get_default_proxy_config(lc)); BC_ASSERT_PTR_NOT_NULL(contact); - contact_host_ip_len = strchr(contact, ':')-contact; - strncpy(contact_host_ip, contact, contact_host_ip_len); - contact_host_ip[contact_host_ip_len]='\0'; - ms_free(contact); - return ms_strdup(contact_host_ip); + return ms_strdup(linphone_address_get_domain(contact)); } diff --git a/tester/video_tester.c b/tester/video_tester.c index 8aa57ca05..2fee24c59 100644 --- a/tester/video_tester.c +++ b/tester/video_tester.c @@ -38,13 +38,13 @@ extern void *gdk_quartz_window_get_nsview(GdkWindow *window); #include -static unsigned long get_native_handle(GdkWindow *gdkw) { +static void *get_native_handle(GdkWindow *gdkw) { #ifdef GDK_WINDOWING_X11 - return (unsigned long)GDK_WINDOW_XID(gdkw); + return (void *)GDK_WINDOW_XID(gdkw); #elif defined(_WIN32) - return (unsigned long)GDK_WINDOW_HWND(gdkw); + return (void *)GDK_WINDOW_HWND(gdkw); #elif defined(__APPLE__) - return (unsigned long)gdk_quartz_window_get_nsview(gdkw); + return (void *)gdk_quartz_window_get_nsview(gdkw); #endif g_warning("No way to get the native handle from gdk window"); return 0; diff --git a/tools/python/apixml2python.py b/tools/python/apixml2python.py index 6cb6f556b..04de40a9e 100755 --- a/tools/python/apixml2python.py +++ b/tools/python/apixml2python.py @@ -76,6 +76,9 @@ hand_written_functions = [ HandWrittenClassMethod('Buffer', 'new_from_data', 'linphone_buffer_new_from_data', "Create a new LinphoneBuffer object from existing data.\n\n:param data: The initial data to store in the LinphoneBuffer.\n:type data: ByteArray\n:returns: A new LinphoneBuffer object.\n:rtype: linphone.Buffer"), HandWrittenProperty('Buffer', 'content', 'linphone_buffer_get_content', 'linphone_buffer_set_content', "[ByteArray] Set the content of the data buffer."), HandWrittenProperty('Content', 'buffer', 'linphone_content_get_buffer', 'linphone_content_set_buffer', "[ByteArray] Set the content data buffer."), + HandWrittenProperty('Call', 'native_video_window_id', 'linphone_call_get_native_video_window_id', 'linphone_call_set_native_video_window_id', "[int] Set the native video window id where the video is to be displayed."), + HandWrittenProperty('Core', 'native_preview_window_id', 'linphone_core_get_native_preview_window_id', 'linphone_core_set_native_preview_window_id', "[int] Set the native window id where the preview video (local camera) is to be displayed. This has to be used in conjonction with :py:meth:`linphone.Core.use_preview_window` . MacOS, Linux, Windows: if not set or zero the core will create its own window, unless the special id -1 is given."), + HandWrittenProperty('Core', 'native_video_window_id', 'linphone_core_get_native_video_window_id', 'linphone_core_set_native_video_window_id', "[int] Set the native video window id where the video is to be displayed. For MacOS, Linux, Windows: if not set or LINPHONE_VIDEO_DISPLAY_AUTO the core will create its own window, unless the special id LINPHONE_VIDEO_DISPLAY_NONE is given."), HandWrittenProperty('Core', 'sip_transports', 'linphone_core_get_sip_transports', 'linphone_core_set_sip_transports', "[:py:class:`linphone.SipTransports`] Sets the ports to be used for each transport. A zero value port for a given transport means the transport is not used. A value of LC_SIP_TRANSPORT_RANDOM (-1) means the port is to be chosen randomly by the system."), HandWrittenProperty('Core', 'sip_transports_used', 'linphone_core_get_sip_transports_used', None, "[:py:class:`linphone.SipTransports`] Retrieves the real port number assigned for each sip transport (udp, tcp, tls). A zero value means that the transport is not activated. If LC_SIP_TRANSPORT_RANDOM was passed to :py:attr:`linphone.Core.sip_transports`, the random port choosed by the system is returned."), HandWrittenProperty('Core', 'sound_devices', 'linphone_core_get_sound_devices', None, "[list of string] Get the available sound devices."), diff --git a/tools/python/apixml2python/handwritten_declarations.mustache b/tools/python/apixml2python/handwritten_declarations.mustache index 4a4b2c1ef..3449fa7e6 100644 --- a/tools/python/apixml2python/handwritten_declarations.mustache +++ b/tools/python/apixml2python/handwritten_declarations.mustache @@ -1,3 +1,9 @@ +static PyObject * pylinphone_Call_get_native_video_window_id(PyObject *self, void *closure); +static int pylinphone_Call_set_native_video_window_id(PyObject *self, PyObject *value, void *closure); +static PyObject * pylinphone_Core_get_native_preview_window_id(PyObject *self, void *closure); +static int pylinphone_Core_set_native_preview_window_id(PyObject *self, PyObject *value, void *closure); +static PyObject * pylinphone_Core_get_native_video_window_id(PyObject *self, void *closure); +static int pylinphone_Core_set_native_video_window_id(PyObject *self, PyObject *value, void *closure); static PyObject * pylinphone_Core_get_sip_transports(PyObject *self, void *closure); static int pylinphone_Core_set_sip_transports(PyObject *self, PyObject *value, void *closure); static void pylinphone_Core_dealloc(PyObject *self); diff --git a/tools/python/apixml2python/handwritten_definitions.mustache b/tools/python/apixml2python/handwritten_definitions.mustache index e9edec0fb..4937b951e 100644 --- a/tools/python/apixml2python/handwritten_definitions.mustache +++ b/tools/python/apixml2python/handwritten_definitions.mustache @@ -128,6 +128,152 @@ static PyObject * pylinphone_module_method_set_log_handler(PyObject *self, PyObj } +static PyObject * pylinphone_Call_get_native_video_window_id(PyObject *self, void *closure) { + void * cresult; + PyObject * pyresult; + PyObject * pyret; + const LinphoneCall *native_ptr; + native_ptr = pylinphone_Call_get_native_ptr(self); + if (native_ptr == NULL) { + PyErr_SetString(PyExc_TypeError, "Invalid linphone.Call instance"); + return NULL; + } + + pylinphone_trace(1, "[PYLINPHONE] >>> %s(%p [%p])", __FUNCTION__, self, native_ptr); + cresult = linphone_call_get_native_video_window_id(native_ptr); + pylinphone_dispatch_messages(); + + pyret = Py_BuildValue("k", (unsigned long)cresult); + + pylinphone_trace(-1, "[PYLINPHONE] <<< %s -> %p", __FUNCTION__, pyret); + return pyret; +} + +static int pylinphone_Call_set_native_video_window_id(PyObject *self, PyObject *value, void *closure) { + LinphoneCall *native_ptr; + unsigned long _id; + native_ptr = pylinphone_Call_get_native_ptr(self); + if (native_ptr == NULL) { + PyErr_SetString(PyExc_TypeError, "Invalid linphone.Call instance"); + return -1; + } + + if (value == NULL) { + PyErr_SetString(PyExc_TypeError, "Cannot delete the 'native_video_window_id' attribute."); + return -1; + } + if (!PyInt_Check(value)) { + PyErr_SetString(PyExc_TypeError, "The 'native_video_window_id' attribute value must be a unsigned int."); + return -1; + } + + _id = (unsigned long)PyInt_AsUnsignedLongMask(value); + + pylinphone_trace(1, "[PYLINPHONE] >>> %s(%p [%p], %u)", __FUNCTION__, self, native_ptr, _id); + linphone_call_set_native_video_window_id(native_ptr, (void *)_id); + pylinphone_dispatch_messages(); + pylinphone_trace(-1, "[PYLINPHONE] <<< %s -> 0", __FUNCTION__); + return 0; +} + + +static PyObject * pylinphone_Core_get_native_preview_window_id(PyObject *self, void *closure) { + void * cresult; + PyObject * pyresult; + PyObject * pyret; + const LinphoneCore *native_ptr; + native_ptr = pylinphone_Core_get_native_ptr(self); + if (native_ptr == NULL) { + PyErr_SetString(PyExc_TypeError, "Invalid linphone.Core instance"); + return NULL; + } + + pylinphone_trace(1, "[PYLINPHONE] >>> %s(%p [%p])", __FUNCTION__, self, native_ptr); + cresult = linphone_core_get_native_preview_window_id(native_ptr); + pylinphone_dispatch_messages(); + + pyret = Py_BuildValue("k", (unsigned long)cresult); + + pylinphone_trace(-1, "[PYLINPHONE] <<< %s -> %p", __FUNCTION__, pyret); + return pyret; +} + +static int pylinphone_Core_set_native_preview_window_id(PyObject *self, PyObject *value, void *closure) { + LinphoneCore *native_ptr; + unsigned long _id; + native_ptr = pylinphone_Core_get_native_ptr(self); + if (native_ptr == NULL) { + PyErr_SetString(PyExc_TypeError, "Invalid linphone.Core instance"); + return -1; + } + + if (value == NULL) { + PyErr_SetString(PyExc_TypeError, "Cannot delete the 'native_preview_window_id' attribute."); + return -1; + } + if (!PyInt_Check(value)) { + PyErr_SetString(PyExc_TypeError, "The 'native_preview_window_id' attribute value must be a unsigned int."); + return -1; + } + + _id = (unsigned long)PyInt_AsUnsignedLongMask(value); + + pylinphone_trace(1, "[PYLINPHONE] >>> %s(%p [%p], %u)", __FUNCTION__, self, native_ptr, _id); + linphone_core_set_native_preview_window_id(native_ptr, (void *)_id); + pylinphone_dispatch_messages(); + pylinphone_trace(-1, "[PYLINPHONE] <<< %s -> 0", __FUNCTION__); + return 0; +} + + +static PyObject * pylinphone_Core_get_native_video_window_id(PyObject *self, void *closure) { + void * cresult; + PyObject * pyresult; + PyObject * pyret; + const LinphoneCore *native_ptr; + native_ptr = pylinphone_Core_get_native_ptr(self); + if (native_ptr == NULL) { + PyErr_SetString(PyExc_TypeError, "Invalid linphone.Core instance"); + return NULL; + } + + pylinphone_trace(1, "[PYLINPHONE] >>> %s(%p [%p])", __FUNCTION__, self, native_ptr); + cresult = linphone_core_get_native_video_window_id(native_ptr); + pylinphone_dispatch_messages(); + + pyret = Py_BuildValue("k", (unsigned long)cresult); + + pylinphone_trace(-1, "[PYLINPHONE] <<< %s -> %p", __FUNCTION__, pyret); + return pyret; +} + +static int pylinphone_Core_set_native_video_window_id(PyObject *self, PyObject *value, void *closure) { + LinphoneCore *native_ptr; + unsigned long _id; + native_ptr = pylinphone_Core_get_native_ptr(self); + if (native_ptr == NULL) { + PyErr_SetString(PyExc_TypeError, "Invalid linphone.Core instance"); + return -1; + } + + if (value == NULL) { + PyErr_SetString(PyExc_TypeError, "Cannot delete the 'native_video_window_id' attribute."); + return -1; + } + if (!PyInt_Check(value)) { + PyErr_SetString(PyExc_TypeError, "The 'native_video_window_id' attribute value must be a unsigned int."); + return -1; + } + + _id = (unsigned long)PyInt_AsUnsignedLongMask(value); + + pylinphone_trace(1, "[PYLINPHONE] >>> %s(%p [%p], %u)", __FUNCTION__, self, native_ptr, _id); + linphone_core_set_native_video_window_id(native_ptr, (void *)_id); + pylinphone_dispatch_messages(); + pylinphone_trace(-1, "[PYLINPHONE] <<< %s -> 0", __FUNCTION__); + return 0; +} + static PyObject * pylinphone_Core_get_sip_transports(PyObject *self, void *closure) { PyObject *pytr; LCSipTransports tr = { 0 }; diff --git a/tools/python/unittests/test_setup.py b/tools/python/unittests/test_setup.py index 9fcafa8b8..9dc2e0fae 100644 --- a/tools/python/unittests/test_setup.py +++ b/tools/python/unittests/test_setup.py @@ -38,16 +38,6 @@ class TestSetup: assert_equals(lc.config.get_int('sip', 'sip_tcp_port', -2), -1) assert_equals(lc.config.get_int('sip', 'sip_tls_port', -2), -1) - def test_interpret_url(self): - lc = linphone.Core.new({}, None, None) - assert lc is not None - sips_address = "sips:margaux@sip.linphone.org" - address = lc.interpret_url(sips_address) - assert address is not None - assert_equals(address.scheme, "sips") - assert_equals(address.username, "margaux") - assert_equals(address.domain, "sip.linphone.org") - def test_lpconfig_from_buffer(self): buffer = "[buffer]\ntest=ok" buffer_linebreaks = "[buffer_linebreaks]\n\n\n\r\n\n\r\ntest=ok"