From 0cdb175b0dd9002f36de9b9eb7036cd211b6e120 Mon Sep 17 00:00:00 2001 From: Richard Shaw Date: Sun, 5 Dec 2021 08:12:58 -0600 Subject: [PATCH 1/4] Rebuild for codec2 1.0.1. --- baresip.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/baresip.spec b/baresip.spec index eafb391..88b9d36 100644 --- a/baresip.spec +++ b/baresip.spec @@ -1,7 +1,7 @@ Summary: Modular SIP user-agent with audio and video support Name: baresip Version: 1.1.0 -Release: 5%{?dist} +Release: 6%{?dist} License: BSD URL: https://github.com/baresip/baresip Source0: https://github.com/baresip/baresip/archive/v%{version}/%{name}-%{version}.tar.gz @@ -609,6 +609,9 @@ gtk-update-icon-cache --force %{_datadir}/icons/Adwaita &>/dev/null || : %{_libdir}/%{name}/modules/x11grab.so %changelog +* Sun Dec 05 2021 Richard Shaw - 1.1.0-6 +- Rebuild for codec2 1.0.1. + * Wed Sep 29 2021 Robert Scheck 1.1.0-5 - Added upstream feature patch for GTK+ attended transfers From df0a9366f389436089566a7a16b90c2999ad7648 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 19 Jan 2022 22:08:53 +0000 Subject: [PATCH 2/4] - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- baresip.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/baresip.spec b/baresip.spec index 88b9d36..3d8f1ad 100644 --- a/baresip.spec +++ b/baresip.spec @@ -1,7 +1,7 @@ Summary: Modular SIP user-agent with audio and video support Name: baresip Version: 1.1.0 -Release: 6%{?dist} +Release: 7%{?dist} License: BSD URL: https://github.com/baresip/baresip Source0: https://github.com/baresip/baresip/archive/v%{version}/%{name}-%{version}.tar.gz @@ -609,6 +609,9 @@ gtk-update-icon-cache --force %{_datadir}/icons/Adwaita &>/dev/null || : %{_libdir}/%{name}/modules/x11grab.so %changelog +* Wed Jan 19 2022 Fedora Release Engineering - 1.1.0-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + * Sun Dec 05 2021 Richard Shaw - 1.1.0-6 - Rebuild for codec2 1.0.1. From bbde53432a09d8b118a7e3ca315ac15f446cc6d8 Mon Sep 17 00:00:00 2001 From: Tom spot Callaway Date: Thu, 27 Jan 2022 16:35:28 -0500 Subject: [PATCH 3/4] rebuild for libvpx --- baresip.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/baresip.spec b/baresip.spec index 3d8f1ad..0c15dce 100644 --- a/baresip.spec +++ b/baresip.spec @@ -1,7 +1,7 @@ Summary: Modular SIP user-agent with audio and video support Name: baresip Version: 1.1.0 -Release: 7%{?dist} +Release: 8%{?dist} License: BSD URL: https://github.com/baresip/baresip Source0: https://github.com/baresip/baresip/archive/v%{version}/%{name}-%{version}.tar.gz @@ -609,6 +609,9 @@ gtk-update-icon-cache --force %{_datadir}/icons/Adwaita &>/dev/null || : %{_libdir}/%{name}/modules/x11grab.so %changelog +* Thu Jan 27 2022 Tom Callaway - 1.1.0-8 +- rebuild for libvpx + * Wed Jan 19 2022 Fedora Release Engineering - 1.1.0-7 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild From 90f340009fc11abfb73a7902cbcde968063470f2 Mon Sep 17 00:00:00 2001 From: Robert Scheck Date: Sun, 13 Mar 2022 04:07:53 +0100 Subject: [PATCH 4/4] Upgrade to 2.0.0 (#2063451) --- baresip-1.1.0-attended-transfer.patch | 532 -------------------------- baresip-1.1.0-call-history.patch | 295 -------------- baresip-1.1.0-fritzbox2baresip.patch | 133 ------- baresip-1.1.0-module-cairo.patch | 446 --------------------- baresip-1.1.0-module-oss.patch | 492 ------------------------ baresip.spec | 131 +++---- sources | 2 +- 7 files changed, 56 insertions(+), 1975 deletions(-) delete mode 100644 baresip-1.1.0-attended-transfer.patch delete mode 100644 baresip-1.1.0-call-history.patch delete mode 100644 baresip-1.1.0-fritzbox2baresip.patch delete mode 100644 baresip-1.1.0-module-cairo.patch delete mode 100644 baresip-1.1.0-module-oss.patch diff --git a/baresip-1.1.0-attended-transfer.patch b/baresip-1.1.0-attended-transfer.patch deleted file mode 100644 index 8c68ff8..0000000 --- a/baresip-1.1.0-attended-transfer.patch +++ /dev/null @@ -1,532 +0,0 @@ -From 6b54370a48287662daae5721782978662095a9e4 Mon Sep 17 00:00:00 2001 -From: mbattista -Date: Fri, 7 May 2021 18:17:01 +0200 -Subject: [PATCH] Attended Transfer on GTK (#1435) - -* attended transfer on gtk - -* fix bug in clean number - -* cleanup duplicated code and add ToolTip on how to use it. - -Co-authored-by: Marcel Battista ---- - include/baresip.h | 1 + - modules/gtk/call_window.c | 71 +++++++++++++++++++++++++++++++--- - modules/gtk/dial_dialog.c | 25 +++++++++--- - modules/gtk/gtk_mod.c | 78 +++++++++++++++++++++++++++++++++++++- - modules/gtk/gtk_mod.h | 17 ++++++++- - modules/menu/static_menu.c | 12 ++++-- - src/call.c | 29 ++++++++++++++ - 7 files changed, 216 insertions(+), 17 deletions(-) - -diff --git a/include/baresip.h b/include/baresip.h -index 965bd99d4..a626c9dc3 100644 ---- a/include/baresip.h -+++ b/include/baresip.h -@@ -198,6 +198,7 @@ int call_send_digit(struct call *call, char key); - bool call_has_audio(const struct call *call); - bool call_has_video(const struct call *call); - int call_transfer(struct call *call, const char *uri); -+int call_replace_transfer(struct call *target_call, struct call *source_call); - int call_status(struct re_printf *pf, const struct call *call); - int call_debug(struct re_printf *pf, const struct call *call); - int call_notify_sipfrag(struct call *call, uint16_t scode, -diff --git a/modules/gtk/call_window.c b/modules/gtk/call_window.c -index bb2f5ecfe..451b56256 100644 ---- a/modules/gtk/call_window.c -+++ b/modules/gtk/call_window.c -@@ -23,11 +23,12 @@ struct call_window { - struct vumeter_enc *enc; - } vu; - struct transfer_dialog *transfer_dialog; -+ struct dial_dialog *attended_transfer_dial; - GtkWidget *window; - GtkLabel *status; - GtkLabel *duration; - struct { -- GtkWidget *hangup, *transfer, *hold, *mute; -+ GtkWidget *hangup, *transfer, *hold, *mute, *attended_transfer; - } buttons; - struct { - GtkProgressBar *enc, *dec; -@@ -37,6 +38,7 @@ struct call_window { - bool closed; - int cur_key; - struct play *play_dtmf_tone; -+ struct call *attended_call; - }; - - enum call_window_events { -@@ -45,6 +47,7 @@ enum call_window_events { - MQ_HOLD, - MQ_MUTE, - MQ_TRANSFER, -+ MQ_ATTTRANSFER, - }; - - static pthread_mutex_t last_data_mut = PTHREAD_MUTEX_INITIALIZER; -@@ -196,10 +199,17 @@ static void call_on_hangup(GtkToggleButton *btn, struct call_window *win) - static void call_on_hold_toggle(GtkToggleButton *btn, struct call_window *win) - { - bool hold = gtk_toggle_button_get_active(btn); -- if (hold) -+ if (hold) { -+ gtk_widget_set_sensitive(win->buttons.attended_transfer, -+ TRUE); - vumeter_timer_stop(win); -+ } - else -+ { -+ gtk_widget_set_sensitive(win->buttons.attended_transfer, -+ FALSE); - vumeter_timer_start(win); -+ } - mqueue_push(win->mq, MQ_HOLD, (void *)(size_t)hold); - } - -@@ -221,6 +231,25 @@ static void call_on_transfer(GtkToggleButton *btn, struct call_window *win) - } - - -+static void call_window_transfer_attended_call(GtkToggleButton *btn, -+ struct call_window *win) -+{ -+ (void)btn; -+ mqueue_push(win->mq, MQ_ATTTRANSFER, win); -+} -+ -+ -+static void call_on_attended_transfer(GtkToggleButton *btn, -+ struct call_window *win) -+{ -+ (void)btn; -+ if (!win->attended_transfer_dial) -+ win->attended_transfer_dial = -+ dial_dialog_alloc(win->mod, win->call); -+ dial_dialog_show(win->attended_transfer_dial); -+} -+ -+ - static gboolean call_on_window_close(GtkWidget *widget, GdkEventAny *event, - struct call_window *win) - { -@@ -319,6 +348,10 @@ static void mqueue_handler(int id, void *data, void *arg) - case MQ_TRANSFER: - call_transfer(win->call, data); - break; -+ -+ case MQ_ATTTRANSFER: -+ call_replace_transfer(win->attended_call, win->call); -+ break; - } - } - -@@ -331,12 +364,14 @@ static void call_window_destructor(void *arg) - gtk_mod_call_window_closed(window->mod, window); - gtk_widget_destroy(window->window); - mem_deref(window->transfer_dialog); -+ mem_deref(window->attended_transfer_dial); - gdk_threads_leave(); - - mem_deref(window->call); - mem_deref(window->mq); - mem_deref(window->vu.enc); - mem_deref(window->vu.dec); -+ mem_deref(window->attended_call); - - if (window->duration_timer_tag) - g_source_remove(window->duration_timer_tag); -@@ -349,7 +384,8 @@ static void call_window_destructor(void *arg) - } - - --struct call_window *call_window_new(struct call *call, struct gtk_mod *mod) -+struct call_window *call_window_new(struct call *call, struct gtk_mod *mod, -+ struct call *attended_call) - { - struct call_window *win; - GtkWidget *window, *label, *status, *button, *progress, *image; -@@ -428,13 +464,33 @@ struct call_window *call_window_new(struct call *call, struct gtk_mod *mod) - GTK_ICON_SIZE_BUTTON); - gtk_button_set_image(GTK_BUTTON(button), image); - -- /* Transfer */ -+ /* Blind Transfer */ - button = gtk_button_new_with_label("Transfer"); - win->buttons.transfer = button; - gtk_box_pack_end(GTK_BOX(button_box), button, FALSE, TRUE, 0); -- g_signal_connect(button, "clicked", G_CALLBACK(call_on_transfer), win); -+ g_signal_connect(button, "clicked", -+ G_CALLBACK(call_on_transfer), win); -+ image = gtk_image_new_from_icon_name("forward", -+ GTK_ICON_SIZE_BUTTON); -+ gtk_button_set_image(GTK_BUTTON(button), image); -+ -+ /* Attended Transfer */ -+ button = gtk_button_new_with_label("Att. Transfer"); -+ win->buttons.attended_transfer = button; -+ gtk_box_pack_end(GTK_BOX(button_box), button, FALSE, TRUE, 0); -+ if (!attended_call) { -+ g_signal_connect(button, "clicked", -+ G_CALLBACK(call_on_attended_transfer), win); -+ } -+ else { -+ g_signal_connect(button, "clicked", -+ G_CALLBACK(call_window_transfer_attended_call), win); -+ } - image = gtk_image_new_from_icon_name("forward", GTK_ICON_SIZE_BUTTON); - gtk_button_set_image(GTK_BUTTON(button), image); -+ gtk_widget_set_sensitive (button, FALSE); -+ gtk_widget_set_tooltip_text(button, -+ "Please put the call on 'Hold' to enable attended transfer"); - - /* Hold */ - button = gtk_toggle_button_new_with_label("Hold"); -@@ -467,9 +523,11 @@ struct call_window *call_window_new(struct call *call, struct gtk_mod *mod) - G_CALLBACK(call_on_key_release), win); - - win->call = mem_ref(call); -+ win->attended_call = mem_ref(attended_call); - win->mod = mod; - win->window = window; - win->transfer_dialog = NULL; -+ win->attended_transfer_dial = NULL; - win->status = GTK_LABEL(status); - win->duration = GTK_LABEL(duration); - win->closed = false; -@@ -509,6 +567,7 @@ void call_window_closed(struct call_window *win, const char *reason) - win->duration_timer_tag = 0; - } - gtk_widget_set_sensitive(win->buttons.transfer, FALSE); -+ gtk_widget_set_sensitive(win->buttons.attended_transfer, FALSE); - gtk_widget_set_sensitive(win->buttons.hold, FALSE); - gtk_widget_set_sensitive(win->buttons.mute, FALSE); - -@@ -522,6 +581,7 @@ void call_window_closed(struct call_window *win, const char *reason) - - call_window_set_status(win, status); - win->transfer_dialog = mem_deref(win->transfer_dialog); -+ win->attended_transfer_dial = mem_deref(win->attended_transfer_dial); - win->closed = true; - - if (reason && strncmp(reason, user_trigger_reason, -@@ -588,3 +648,4 @@ bool call_window_is_for_call(struct call_window *win, struct call *call) - - return win->call == call; - } -+ -diff --git a/modules/gtk/dial_dialog.c b/modules/gtk/dial_dialog.c -index 8590702f5..22abefdd4 100644 ---- a/modules/gtk/dial_dialog.c -+++ b/modules/gtk/dial_dialog.c -@@ -10,12 +10,14 @@ - #include - #include - #include "gtk_mod.h" -+#include - - - struct dial_dialog { - struct gtk_mod *mod; - GtkWidget *dialog; - GtkComboBox *uri_combobox; -+ struct call *attended_call; - }; - - -@@ -26,9 +28,14 @@ static int clean_number(char* str) - /* only clean numeric numbers - * In other cases trust the user input - */ -- int err = re_regex(str, str_len(str), "[A-Za-z]"); -- if (err == 0) -- return -1; -+ while (str[i]) { -+ if (isalpha(str[i] != 0)) -+ return -1; -+ else if (str[i] == '@') -+ return -1; -+ ++i; -+ } -+ i = 0; - - /* remove (0) which is in some mal-formated numbers - * but only if trailed by another character -@@ -77,7 +84,13 @@ static void dial_dialog_on_response(GtkDialog *dialog, gint response_id, - uri_combo_box_set_text(dd->uri_combobox, - uri, length); - } -- gtk_mod_connect(dd->mod, uri); -+ if (!dd->attended_call) { -+ gtk_mod_connect(dd->mod, uri); -+ } -+ else { -+ gtk_mod_connect_attended(dd->mod, uri, -+ dd->attended_call); -+ } - } - - gtk_widget_hide(GTK_WIDGET(dialog)); -@@ -92,7 +105,8 @@ static void destructor(void *arg) - } - - --struct dial_dialog *dial_dialog_alloc(struct gtk_mod *mod) -+struct dial_dialog *dial_dialog_alloc(struct gtk_mod *mod, -+ struct call *attended_call) - { - struct dial_dialog *dd; - GtkWidget *dial; -@@ -138,6 +152,7 @@ struct dial_dialog *dial_dialog_alloc(struct gtk_mod *mod) - dd->dialog = dial; - dd->uri_combobox = GTK_COMBO_BOX(uri_combobox); - dd->mod = mod; -+ dd->attended_call = attended_call; - - return dd; - } -diff --git a/modules/gtk/gtk_mod.c b/modules/gtk/gtk_mod.c -index 55a806620..5cfa07830 100644 ---- a/modules/gtk/gtk_mod.c -+++ b/modules/gtk/gtk_mod.c -@@ -68,6 +68,7 @@ static struct gtk_mod mod_obj; - enum gtk_mod_events { - MQ_POPUP, - MQ_CONNECT, -+ MQ_CONNECTATTENDED, - MQ_QUIT, - MQ_ANSWER, - MQ_HANGUP, -@@ -143,7 +144,7 @@ static void menu_on_dial(GtkMenuItem *menuItem, gpointer arg) - struct gtk_mod *mod = arg; - (void)menuItem; - if (!mod->dial_dialog) -- mod->dial_dialog = dial_dialog_alloc(mod); -+ mod->dial_dialog = dial_dialog_alloc(mod, NULL); - dial_dialog_show(mod->dial_dialog); - } - -@@ -156,6 +157,7 @@ static void menu_on_dial_contact(GtkMenuItem *menuItem, gpointer arg) - gtk_mod_connect(mod, uri); - } - -+ - static void menu_on_dial_history(GtkMenuItem *menuItem, gpointer arg) - { - struct gtk_mod *mod = arg; -@@ -557,7 +559,19 @@ static void reject_activated(GSimpleAction *action, GVariant *parameter, - static struct call_window *new_call_window(struct gtk_mod *mod, - struct call *call) - { -- struct call_window *win = call_window_new(call, mod); -+ struct call_window *win = call_window_new(call, mod, NULL); -+ if (call) { -+ mod->call_windows = g_slist_append(mod->call_windows, win); -+ } -+ return win; -+} -+ -+ -+static struct call_window *new_call_transfer_window(struct gtk_mod *mod, -+ struct call *call, -+ struct call *attended_call) -+{ -+ struct call_window *win = call_window_new(call, mod, attended_call); - if (call) { - mod->call_windows = g_slist_append(mod->call_windows, win); - } -@@ -785,6 +799,42 @@ int gtk_mod_connect(struct gtk_mod *mod, const char *uri) - } - - -+int gtk_mod_connect_attended(struct gtk_mod *mod, const char *uri, -+ struct call *attended_call) -+{ -+ struct attended_transfer_store *ats; -+ struct mbuf *uribuf = NULL; -+ char *uri_copy = NULL; -+ int err = 0; -+ -+ if (!mod) -+ return ENOMEM; -+ -+ uribuf = mbuf_alloc(64); -+ ats = mem_zalloc(sizeof(struct attended_transfer_store), NULL); -+ if (!uribuf) -+ return ENOMEM; -+ -+ err = account_uri_complete(ua_account(mod->ua_cur), uribuf, uri); -+ if (err) -+ return EINVAL; -+ -+ uribuf->pos = 0; -+ err = mbuf_strdup(uribuf, &uri_copy, uribuf->end); -+ if (err) -+ goto out; -+ -+ ats->uri = (char *)uri_copy; -+ ats->attended_call = attended_call; -+ -+ err = mqueue_push(mod->mq, MQ_CONNECTATTENDED, ats); -+ -+out: -+ mem_deref(uribuf); -+ return err; -+} -+ -+ - bool gtk_mod_clean_number(struct gtk_mod *mod) - { - if (!mod) -@@ -819,6 +869,7 @@ static void mqueue_handler(int id, void *data, void *arg) - struct gtk_mod *mod = arg; - const char *uri; - struct call *call; -+ struct attended_transfer_store *ats; - int err; - struct ua *ua = gtk_current_ua(); - -@@ -851,6 +902,29 @@ static void mqueue_handler(int id, void *data, void *arg) - mem_deref(data); - break; - -+ case MQ_CONNECTATTENDED: -+ ats = data; -+ err = ua_connect(ua, &call, NULL, ats->uri, VIDMODE_ON); -+ add_history_menu_item(mod, ats->uri, CALL_OUTGOING, ""); -+ if (err) { -+ gdk_threads_enter(); -+ warning_dialog("Call failed", -+ "Connecting to \"%s\" failed.\n" -+ "Error: %m", ats->uri, err); -+ gdk_threads_leave(); -+ break; -+ } -+ gdk_threads_enter(); -+ err = new_call_transfer_window(mod, call, -+ ats->attended_call) == NULL; -+ gdk_threads_leave(); -+ if (err) { -+ ua_hangup(ua, call, 500, "Server Error"); -+ } -+ mem_deref(ats->uri); -+ mem_deref(data); -+ break; -+ - case MQ_HANGUP: - call = data; - ua_hangup(ua, call, 0, NULL); -diff --git a/modules/gtk/gtk_mod.h b/modules/gtk/gtk_mod.h -index 2f3bfb4f4..522202d26 100644 ---- a/modules/gtk/gtk_mod.h -+++ b/modules/gtk/gtk_mod.h -@@ -26,15 +26,27 @@ struct vumeter_dec { - volatile bool started; - }; - -+struct attended_transfer_store { -+ struct call *attended_call; -+ char *uri; -+}; -+ -+ - /* Main menu */ - int gtk_mod_connect(struct gtk_mod *, const char *uri); -+int gtk_mod_connect_attended(struct gtk_mod *, const char *uri, -+ struct call *attended_call); -+int gtk_mod_transfer(struct gtk_mod *, const char *uri, -+ struct call *attended_call); - void gtk_mod_call_window_closed(struct gtk_mod *, struct call_window *); - - /* Call Window */ --struct call_window *call_window_new(struct call *call, struct gtk_mod *mod); -+struct call_window *call_window_new(struct call *call, struct gtk_mod *mod, -+ struct call *attended_call); - void call_window_got_vu_dec(struct vumeter_dec *); - void call_window_got_vu_enc(struct vumeter_enc *); - void call_window_transfer(struct call_window *, const char *uri); -+void call_window_atttransfer(struct call_window *, const char *uri); - void call_window_closed(struct call_window *, const char *reason); - void call_window_ringing(struct call_window *); - void call_window_progress(struct call_window *); -@@ -43,7 +55,8 @@ void call_window_transfer_failed(struct call_window *, const char *reason); - bool call_window_is_for_call(struct call_window *, struct call *); - - /* Dial Dialog */ --struct dial_dialog *dial_dialog_alloc(struct gtk_mod *); -+struct dial_dialog *dial_dialog_alloc(struct gtk_mod *, -+ struct call *attended_call); - void dial_dialog_show(struct dial_dialog *); - - /* Call transfer dialog */ -diff --git a/modules/menu/static_menu.c b/modules/menu/static_menu.c -index 91bbfd948..1fcc25ca0 100644 ---- a/modules/menu/static_menu.c -+++ b/modules/menu/static_menu.c -@@ -6,6 +6,7 @@ - #include - #include - #include -+#include - - #include "menu.h" - -@@ -395,9 +396,14 @@ static void clean_number(char *str) - /* only clean numeric numbers - * In other cases trust the user input - */ -- int err = re_regex(str, str_len(str), "[A-Za-z]"); -- if (err == 0) -- return; -+ while (str[i]) { -+ if (isalpha(str[i] != 0)) -+ return; -+ else if (str[i] == '@') -+ return; -+ ++i; -+ } -+ i = 0; - - /* remove (0) which is in some mal-formated numbers - * but only if trailed by another character -diff --git a/src/call.c b/src/call.c -index d9f35248a..496fcecdb 100644 ---- a/src/call.c -+++ b/src/call.c -@@ -2291,6 +2291,35 @@ int call_transfer(struct call *call, const char *uri) - } - - -+/** -+ * Transfer the call to a target SIP uri and replace the source call -+ * -+ * @param call Call object -+ * @param uri Target SIP uri -+ * -+ * @return 0 if success, otherwise errorcode -+ */ -+int call_replace_transfer(struct call *call, struct call *source_call) -+{ -+ int err; -+ -+ info("transferring call to %s\n", source_call->peer_uri); -+ -+ call->sub = mem_deref(call->sub); -+ err = sipevent_drefer(&call->sub, uag_sipevent_sock(), -+ sipsess_dialog(call->sess), ua_cuser(call->ua), -+ auth_handler, call->acc, true, -+ sipsub_notify_handler, sipsub_close_handler, -+ call, "Refer-To: %s?Replaces=%s\r\n", -+ source_call->peer_uri, source_call->id); -+ if (err) { -+ warning("call: sipevent_drefer: %m\n", err); -+ } -+ -+ return err; -+} -+ -+ - int call_af(const struct call *call) - { - return call ? call->af : AF_UNSPEC; diff --git a/baresip-1.1.0-call-history.patch b/baresip-1.1.0-call-history.patch deleted file mode 100644 index 2e8a99a..0000000 --- a/baresip-1.1.0-call-history.patch +++ /dev/null @@ -1,295 +0,0 @@ -From 68fd6b29d34380f74ea69b32cf055639ae2b7a35 Mon Sep 17 00:00:00 2001 -From: mbattista -Date: Sat, 24 Apr 2021 09:18:38 +0200 -Subject: [PATCH] GTK caller history (#1350) - -* caller history - -* other icons - -* rejected and [] - -* limit caller history - -* fix ccheck - -* take better icons if available - -* symbolic icons suffix - -* check against theme if icons exists - -* symbolic for status icon - -* dialog-close is not in all icons - -* fixing crash when calling same person multiple times - -* check against null safty - -Co-authored-by: Marcel Battista ---- - modules/gtk/gtk_mod.c | 135 ++++++++++++++++++++++++++++++++++++++++++ - modules/gtk/gtk_mod.h | 5 ++ - 2 files changed, 140 insertions(+) - -diff --git a/modules/gtk/gtk_mod.c b/modules/gtk/gtk_mod.c -index afbbc3806..55a806620 100644 ---- a/modules/gtk/gtk_mod.c -+++ b/modules/gtk/gtk_mod.c -@@ -6,6 +6,7 @@ - */ - #include - #include -+#include - #include - #include - #include -@@ -43,11 +44,13 @@ struct gtk_mod { - bool run; - bool contacts_inited; - struct mqueue *mq; -+ int call_history_length; - GApplication *app; - GtkStatusIcon *status_icon; - GtkWidget *app_menu; - GtkWidget *contacts_menu; - GtkWidget *accounts_menu; -+ GtkWidget *history_menu; - GtkWidget *status_menu; - GSList *accounts_menu_group; - struct dial_dialog *dial_dialog; -@@ -55,6 +58,9 @@ struct gtk_mod { - GSList *incoming_call_menus; - bool clean_number; - struct ua *ua_cur; -+ bool icon_call_missed; -+ bool icon_call_outgoing; -+ bool icon_call_incoming; - }; - - static struct gtk_mod mod_obj; -@@ -150,6 +156,25 @@ static void menu_on_dial_contact(GtkMenuItem *menuItem, gpointer arg) - gtk_mod_connect(mod, uri); - } - -+static void menu_on_dial_history(GtkMenuItem *menuItem, gpointer arg) -+{ -+ struct gtk_mod *mod = arg; -+ const char *label = gtk_menu_item_get_label(menuItem); -+ char *label_1; -+ char buf[256]; -+ char *uri; -+ -+ str_ncpy(buf, label, sizeof(buf)); -+ label_1 = strchr(buf, '['); -+ if (!label_1) -+ return; -+ -+ label_1[0] = ' '; -+ -+ uri = strtok(label_1, "]"); -+ gtk_mod_connect(mod, uri); -+} -+ - - static void init_contacts_menu(struct gtk_mod *mod) - { -@@ -170,6 +195,78 @@ static void init_contacts_menu(struct gtk_mod *mod) - } - - -+static void add_history_menu_item(struct gtk_mod *mod, const char *uri, -+ int call_type, const char *info) -+{ -+ GtkWidget *item, *history_item; -+ GtkMenuShell *history_menu = GTK_MENU_SHELL(mod->history_menu); -+ char buf[256]; -+ time_t rawtime = time(NULL); -+ struct tm *ptm = localtime(&rawtime); -+ GList *list; -+ -+ if (mod->call_history_length < 20) { -+ mod->call_history_length++; -+ } -+ else { -+ /* Remove old call history */ -+ list = gtk_container_get_children(GTK_CONTAINER(history_menu)); -+ history_item = GTK_WIDGET(list->data); -+ gtk_widget_destroy(history_item); -+ -+ } -+ -+ re_snprintf(buf, sizeof buf, -+ "%s [%s]\n%04d-%02d-%02d %02d:%02d:%02d", -+ info, uri, ptm->tm_year + 1900, ptm->tm_mon + 1, -+ ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec); -+ -+ item = gtk_image_menu_item_new_with_label(buf); -+ switch (call_type) { -+ case CALL_INCOMING: -+ gtk_image_menu_item_set_image( -+ GTK_IMAGE_MENU_ITEM(item), -+ gtk_image_new_from_icon_name( -+ (mod->icon_call_incoming) ? -+ "call-incoming-symbolic" : "go-next", -+ GTK_ICON_SIZE_MENU)); -+ break; -+ case CALL_OUTGOING: -+ gtk_image_menu_item_set_image( -+ GTK_IMAGE_MENU_ITEM(item), -+ gtk_image_new_from_icon_name( -+ (mod->icon_call_outgoing) ? -+ "call-outgoing-symbolic" -+ : "go-previous", -+ GTK_ICON_SIZE_MENU)); -+ break; -+ case CALL_MISSED: -+ gtk_image_menu_item_set_image( -+ GTK_IMAGE_MENU_ITEM(item), -+ gtk_image_new_from_icon_name( -+ (mod->icon_call_missed) ? -+ "call-missed-symbolic" : "call-stop", -+ GTK_ICON_SIZE_MENU)); -+ break; -+ case CALL_REJECTED: -+ gtk_image_menu_item_set_image( -+ GTK_IMAGE_MENU_ITEM(item), -+ gtk_image_new_from_icon_name( -+ "window-close", GTK_ICON_SIZE_MENU)); -+ break; -+ default: -+ gtk_image_menu_item_set_image( -+ GTK_IMAGE_MENU_ITEM(item), -+ gtk_image_new_from_icon_name( -+ "call-start", GTK_ICON_SIZE_MENU)); -+ break; -+ } -+ gtk_menu_shell_append(history_menu, item); -+ g_signal_connect(G_OBJECT(item), "activate", -+ G_CALLBACK(menu_on_dial_history), mod); -+} -+ -+ - static void menu_on_account_toggled(GtkCheckMenuItem *menu_item, - struct gtk_mod *mod) - { -@@ -207,6 +304,8 @@ static void menu_on_incoming_call_reject(GtkMenuItem *menuItem, - struct gtk_mod *mod) - { - struct call *call = g_object_get_data(G_OBJECT(menuItem), "call"); -+ add_history_menu_item(mod,call_peeruri(call), CALL_REJECTED, -+ call_peername(call)); - denotify_incoming_call(mod, call); - mqueue_push(mod->mq, MQ_HANGUP, call); - } -@@ -448,6 +547,8 @@ static void reject_activated(GSimpleAction *action, GVariant *parameter, - - if (call) { - denotify_incoming_call(mod, call); -+ add_history_menu_item(mod,call_peeruri(call), CALL_REJECTED, -+ call_peername(call)); - mqueue_push(mod->mq, MQ_HANGUP, call); - } - } -@@ -530,6 +631,18 @@ static void ua_event_handler(struct ua *ua, - if (win) - call_window_closed(win, prm); - denotify_incoming_call(mod, call); -+ if (!call_is_outgoing(call) -+ && call_state(call) != CALL_STATE_TERMINATED -+ && call_state(call) != CALL_STATE_ESTABLISHED) { -+ add_history_menu_item(mod, -+ call_peeruri(call), -+ CALL_MISSED, call_peername(call)); -+ -+ gtk_status_icon_set_from_icon_name( -+ mod->status_icon, -+ (mod->icon_call_missed) ? -+ "call-missed-symbolic" : "call-stop"); -+ } - break; - - case UA_EVENT_CALL_RINGING: -@@ -637,6 +750,7 @@ static gboolean status_icon_on_button_press(GtkStatusIcon *status_icon, - { - popup_menu(mod, gtk_status_icon_position_menu, status_icon, - event->button, event->time); -+ gtk_status_icon_set_from_icon_name(status_icon, "call-start"); - return TRUE; - } - -@@ -719,6 +833,7 @@ static void mqueue_handler(int id, void *data, void *arg) - case MQ_CONNECT: - uri = data; - err = ua_connect(ua, &call, NULL, uri, VIDMODE_ON); -+ add_history_menu_item(mod, uri, CALL_OUTGOING, ""); - if (err) { - gdk_threads_enter(); - warning_dialog("Call failed", -@@ -748,6 +863,8 @@ static void mqueue_handler(int id, void *data, void *arg) - case MQ_ANSWER: - call = data; - err = ua_answer(ua, call, VIDMODE_ON); -+ add_history_menu_item(mod, call_peeruri(call), -+ CALL_INCOMING, call_peername(call)); - if (err) { - gdk_threads_enter(); - warning_dialog("Call failed", -@@ -782,6 +899,8 @@ static void *gtk_thread(void *arg) - GtkWidget *item; - GError *err = NULL; - struct le *le; -+ GtkIconTheme *theme; -+ - - gdk_threads_init(); - gtk_init(0, NULL); -@@ -814,6 +933,7 @@ static void *gtk_thread(void *arg) - mod->dial_dialog = NULL; - mod->call_windows = NULL; - mod->incoming_call_menus = NULL; -+ mod->call_history_length = 0; - - /* App menu */ - mod->app_menu = gtk_menu_new(); -@@ -872,8 +992,23 @@ static void *gtk_thread(void *arg) - gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), - mod->contacts_menu); - -+ /* Caller history */ -+ mod->history_menu = gtk_menu_new(); -+ item = gtk_menu_item_new_with_mnemonic("Call _history"); -+ gtk_menu_shell_append(app_menu, item); -+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), -+ mod->history_menu); -+ - gtk_menu_shell_append(app_menu, gtk_separator_menu_item_new()); - -+ theme = gtk_icon_theme_get_default(); -+ mod->icon_call_incoming = gtk_icon_theme_has_icon(theme, -+ "call-incoming-symbolic"); -+ mod->icon_call_outgoing = gtk_icon_theme_has_icon(theme, -+ "call-outgoing-symbolic"); -+ mod->icon_call_missed = gtk_icon_theme_has_icon(theme, -+ "call-missed-symbolic"); -+ - /* About */ - item = gtk_menu_item_new_with_mnemonic("A_bout"); - g_signal_connect(G_OBJECT(item), "activate", -diff --git a/modules/gtk/gtk_mod.h b/modules/gtk/gtk_mod.h -index 50f6a9a98..2f3bfb4f4 100644 ---- a/modules/gtk/gtk_mod.h -+++ b/modules/gtk/gtk_mod.h -@@ -4,6 +4,11 @@ - * Copyright (C) 2015 Charles E. Lehner - */ - -+#define CALL_INCOMING 0 -+#define CALL_OUTGOING 1 -+#define CALL_MISSED 2 -+#define CALL_REJECTED 3 -+ - struct gtk_mod; - struct call_window; - struct dial_dialog; diff --git a/baresip-1.1.0-fritzbox2baresip.patch b/baresip-1.1.0-fritzbox2baresip.patch deleted file mode 100644 index e5c6490..0000000 --- a/baresip-1.1.0-fritzbox2baresip.patch +++ /dev/null @@ -1,133 +0,0 @@ -From b0669e837daefeaff482a04d6dc15df1c6ebc0f0 Mon Sep 17 00:00:00 2001 -From: Robert Scheck -Date: Sat, 24 Apr 2021 09:22:26 +0200 -Subject: [PATCH] Convert FRITZ!Box XML phone book into Baresip contacts - (#1382) - ---- - .github/workflows/tools.yml | 14 ++++++ - tools/fritzbox2baresip | 94 +++++++++++++++++++++++++++++++++++++ - 2 files changed, 108 insertions(+) - create mode 100644 .github/workflows/tools.yml - create mode 100755 tools/fritzbox2baresip - -diff --git a/.github/workflows/tools.yml b/.github/workflows/tools.yml -new file mode 100644 -index 000000000..6cc62d606 ---- /dev/null -+++ b/.github/workflows/tools.yml -@@ -0,0 +1,14 @@ -+name: Tools -+ -+on: [push, pull_request] -+ -+jobs: -+ build: -+ runs-on: ubuntu-latest -+ -+ steps: -+ - uses: actions/checkout@v2 -+ - name: pylint -+ uses: cclauss/GitHub-Action-for-pylint@0.7.0 -+ with: -+ args: "pylint tools/fritzbox2baresip" -diff --git a/tools/fritzbox2baresip b/tools/fritzbox2baresip -new file mode 100755 -index 000000000..cba91630f ---- /dev/null -+++ b/tools/fritzbox2baresip -@@ -0,0 +1,94 @@ -+#!/usr/bin/python3 -+# -+# Copyright (c) 2021, Robert Scheck -+# -+# All rights reserved. -+# -+# Redistribution and use in source and binary forms, with or without -+# modification, are permitted provided that the following conditions -+# are met: -+# -+# 1. Redistributions of source code must retain the above copyright -+# notice, this list of conditions and the following disclaimer. -+# 2. Redistributions in binary form must reproduce the above copyright -+# notice, this list of conditions and the following disclaimer in the -+# documentation and/or other materials provided with the distribution. -+# 3. Neither the name of the copyright holder nor the names of its -+# contributors may be used to endorse or promote products derived -+# from this software without specific prior written permission. -+# -+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+# -+ -+"""Convert FRITZ!Box XML phone book into Baresip contacts""" -+ -+import sys -+import xml.etree.ElementTree -+ -+def fail(msg): -+ """Print failure message to STDERR and end with non-zero exit code""" -+ print(msg, file=sys.stderr) -+ sys.exit(1) -+ -+def usage(): -+ """Handle mandatory and optional command line arguments""" -+ if len(sys.argv) not in range(2, 5): -+ fail(f"Usage: {sys.argv[0]} [] " -+ "[]") -+ -+ return sys.argv[1], \ -+ sys.argv[2] if len(sys.argv) >= 3 else None, \ -+ f"@{sys.argv[3]}" if len(sys.argv) == 4 else "@fritz.box" -+ -+def convert(entries, src, host="@fritz.box"): -+ """Convert FRITZ!Box XML phone book into Baresip contacts""" -+ try: -+ types = {'home': '\N{house building}', -+ 'work': '\N{briefcase}', -+ 'mobile': '\N{mobile phone}'} -+ tree = xml.etree.ElementTree.parse(src) -+ for contact in tree.iter('contact'): -+ realname = contact.findtext("./person/realName") -+ for ntype in [*types]: -+ number = contact.findtext("./telephony/number" -+ f"[@type='{ntype}']") -+ if number is not None: -+ entries.append(f"{types[ntype]} {realname} ") -+ except FileNotFoundError: -+ fail(f"Error: File '{src}' does not exist or can not be read!") -+ except xml.etree.ElementTree.ParseError: -+ fail(f"Error: File '{src}' is no FRITZ!Box XML phone book or damaged!") -+ -+def write(entries, src=None, dst=None): -+ """Write Baresip contacts to file or STDOUT""" -+ try: -+ dst = None if dst == '-' else dst -+ sys.stdout.close = lambda: None -+ with (open(dst, 'w') if dst else sys.stdout) as contacts: -+ contacts.write("# SIP contacts\n") -+ contacts.write("# Source: " -+ f"{'(unknown)' if src is None else src }\n") -+ contacts.write('\n'.join(entries) + '\n') -+ except PermissionError: -+ fail(f"Error: File '{dst}' can not be created or written to!") -+ -+def main(): -+ """Handle command line arguments, convert phone book and write result""" -+ entries = [] -+ src, dst, host = usage() -+ convert(entries, src, host) -+ write(entries, src, dst) -+ -+if __name__ == "__main__": -+ main() diff --git a/baresip-1.1.0-module-cairo.patch b/baresip-1.1.0-module-cairo.patch deleted file mode 100644 index a0c37fb..0000000 --- a/baresip-1.1.0-module-cairo.patch +++ /dev/null @@ -1,446 +0,0 @@ -From 01804dcfaf77e298a3f7bdc3d4cfe0882bf681cd Mon Sep 17 00:00:00 2001 -From: "Alfred E. Heggestad" -Date: Sat, 24 Apr 2021 11:41:22 +0200 -Subject: [PATCH] cairo: remove deprecated module - -the avformat module can be used for video test source: - - video_source avformat,lavfi,testsrc2 ---- - README.md | 2 - - docs/examples/config | 1 - - mk/modules.mk | 1 - - modules/cairo/cairo.c | 347 ---------------------------------------- - modules/cairo/module.mk | 12 -- - src/config.c | 1 - - 6 files changed, 364 deletions(-) - delete mode 100644 modules/cairo/cairo.c - delete mode 100644 modules/cairo/module.mk - -diff --git a/README.md b/README.md -index 1ad82c9bd..d87a76564 100644 ---- a/README.md -+++ b/README.md -@@ -110,7 +110,6 @@ Distributed under BSD license - * Video-drivers: - - iOS avcapture video-source - - FFmpeg/libav libavformat/avdevice input -- - Cairo video-source test module - - Direct Show video-source - - MacOSX AVCapture video-source - - RST media player -@@ -229,7 +228,6 @@ avcapture Video source using iOS AVFoundation video capture - avcodec Video codec using FFmpeg/libav libavcodec - avformat Video source using FFmpeg/libav libavformat - b2bua Back-to-Back User-Agent (B2BUA) module --cairo Cairo video source - codec2 Codec2 low bit rate speech codec - cons UDP/TCP console UI driver - contact Contacts module -diff --git a/docs/examples/config b/docs/examples/config -index e0921b0fb..5e7a29b9a 100644 ---- a/docs/examples/config -+++ b/docs/examples/config -@@ -122,7 +122,6 @@ module alsa.so - #module v4l2.so - #module v4l2_codec.so - #module x11grab.so --#module cairo.so - #module vidbridge.so - - # Video display modules -diff --git a/mk/modules.mk b/mk/modules.mk -index ce7fd1313..d4e53a337 100644 ---- a/mk/modules.mk -+++ b/mk/modules.mk -@@ -333,7 +333,6 @@ ifneq ($(USE_AVFILTER),) - MODULES += avfilter - endif - ifneq ($(USE_CAIRO),) --MODULES += cairo - ifneq ($(USE_MPG123),) - MODULES += rst - endif -diff --git a/modules/cairo/cairo.c b/modules/cairo/cairo.c -deleted file mode 100644 -index 85cef8031..000000000 ---- a/modules/cairo/cairo.c -+++ /dev/null -@@ -1,347 +0,0 @@ --/** -- * @file cairo.c Cairo module -- * -- * Copyright (C) 2010 Alfred E. Heggestad -- */ --#define _DEFAULT_SOURCE 1 --#define _BSD_SOURCE 1 --#include --#include --#include --#include --#include --#include --#include -- -- --#if !defined (M_PI) --#define M_PI 3.14159265358979323846264338327 --#endif -- -- --/** -- * @defgroup cairo cairo -- * -- * Cairo video-source module is a video generator for testing -- * and demo purposes. -- * -- * Note: This module is very experimental! -- * -- * Use Cairo library to draw graphics into a frame buffer -- */ -- -- --enum { -- FONT_SIZE = 18 --}; -- --struct vidsrc_st { -- struct vidsrc_prm prm; -- struct vidsz size; -- cairo_surface_t *surface; -- cairo_t *cr; -- cairo_surface_t *surface_logo; -- cairo_t *cr_logo; -- double logo_width; -- double logo_height; -- double step; -- bool run; -- pthread_t thread; -- vidsrc_frame_h *frameh; -- void *arg; --}; -- -- --static struct vidsrc *vidsrc; -- -- --static void destructor(void *arg) --{ -- struct vidsrc_st *st = arg; -- -- if (st->run) { -- st->run = false; -- pthread_join(st->thread, NULL); -- } -- -- if (st->cr) -- cairo_destroy(st->cr); -- if (st->surface) -- cairo_surface_destroy(st->surface); -- -- if (st->cr_logo) -- cairo_destroy(st->cr_logo); -- if (st->surface_logo) -- cairo_surface_destroy(st->surface_logo); --} -- -- --static void draw_background(cairo_t *cr, double color_step, -- int width, int height) --{ -- cairo_pattern_t *pat; -- double grey, r, g, b; -- -- grey = 0.1 + fabs(sin(3 * color_step)); -- r = grey; -- g = grey; -- b = grey; -- -- pat = cairo_pattern_create_linear (0.0, 0.0, 0.0, height); -- cairo_pattern_add_color_stop_rgba (pat, 1, r, g, b, 1); -- cairo_pattern_add_color_stop_rgba (pat, 0, 0, 0, 0, 1); -- cairo_rectangle (cr, 0, 0, width, height); -- cairo_set_source (cr, pat); -- cairo_fill (cr); -- cairo_pattern_destroy (pat); --} -- -- --static void draw_text(struct vidsrc_st *st, int x, int y, -- const char *fmt, ...) --{ -- char buf[4096] = ""; -- va_list ap; -- -- va_start(ap, fmt); -- (void)re_vsnprintf(buf, sizeof(buf), fmt, ap); -- va_end(ap); -- -- cairo_set_source_rgb(st->cr, 1.0, 1.0, 1.0); /* white */ -- -- cairo_set_font_size(st->cr, FONT_SIZE); -- cairo_move_to(st->cr, x, y); -- cairo_show_text(st->cr, buf); --} -- -- --static void draw_logo(struct vidsrc_st *st) --{ -- double x, y; -- -- x = (st->size.w - st->logo_width) * (sin(10 * st->step) + 1)/2; -- y = (st->size.h - st->logo_height)* (1 - fabs(sin(30 * st->step))); -- -- cairo_set_source_surface(st->cr, st->surface_logo, x, y); -- cairo_paint(st->cr); --} -- -- --static void process(struct vidsrc_st *st, uint64_t timestamp) --{ -- struct vidframe f; -- unsigned xoffs = 2, yoffs = 24; -- -- draw_background(st->cr, st->step, st->size.w, st->size.h); -- -- draw_text(st, xoffs, yoffs + FONT_SIZE, "%H", fmt_gmtime, NULL); -- -- draw_text(st, xoffs, yoffs + FONT_SIZE*2, "%u x %u @ %.2f fps", -- st->size.w, st->size.h, st->prm.fps); -- -- draw_text(st, xoffs, yoffs + FONT_SIZE*3, "Time: %.3f sec", -- timestamp / (double)VIDEO_TIMEBASE); -- -- draw_logo(st); -- -- st->step += 0.02 / st->prm.fps; -- -- vidframe_init_buf(&f, VID_FMT_RGB32, &st->size, -- cairo_image_surface_get_data(st->surface)); -- -- st->frameh(&f, timestamp, st->arg); --} -- -- --static void *read_thread(void *arg) --{ -- struct vidsrc_st *st = arg; -- uint64_t ts = 0, ts_start = 0; -- -- while (st->run) { -- -- uint64_t now; -- uint64_t timestamp; -- -- sys_msleep(2); -- -- now = tmr_jiffies(); -- if (!ts) { -- ts = ts_start = now; -- } -- -- if (ts > now) -- continue; -- -- timestamp = (ts - ts_start) * VIDEO_TIMEBASE / 1000; -- -- process(st, timestamp); -- -- ts += 1000/st->prm.fps; -- } -- -- return NULL; --} -- -- --static int load_logo(struct vidsrc_st *st, const char *filename) --{ -- cairo_surface_t *logo; -- double lw; -- double scale; -- int err = 0; -- -- logo = cairo_image_surface_create_from_png(filename); -- if (!logo) { -- warning("cairo: failed to load PNG logo\n"); -- err = ENOENT; -- goto out; -- } -- -- if (!cairo_image_surface_get_width(logo) || -- !cairo_image_surface_get_height(logo)) { -- warning("cairo: invalid logo (%s)\n", filename); -- err = ENOENT; -- goto out; -- } -- -- st->logo_width = st->size.w / 2; -- lw = cairo_image_surface_get_width(logo); -- scale = (double)st->logo_width / (double)lw; -- -- st->logo_height = cairo_image_surface_get_height(logo) * scale; -- -- /* create a scaled-down logo with same aspect ratio */ -- -- st->surface_logo = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, -- st->logo_width, -- st->logo_height); -- if (!st->surface_logo) { -- err = ENOMEM; -- goto out; -- } -- -- st->cr_logo = cairo_create(st->surface_logo); -- if (!st->cr_logo) { -- err = ENOMEM; -- goto out; -- } -- -- cairo_scale(st->cr_logo, scale, scale); -- -- cairo_set_source_surface(st->cr_logo, logo, 0, 0); -- cairo_paint(st->cr_logo); -- -- info("cairo: scaling logo '%s' from %d x %d to %.1f x %.1f\n", -- filename, -- cairo_image_surface_get_width(logo), -- cairo_image_surface_get_height(logo), -- st->logo_width, -- st->logo_height); -- -- out: -- if (logo) -- cairo_surface_destroy(logo); -- return err; --} -- -- --static int alloc(struct vidsrc_st **stp, const struct vidsrc *vs, -- struct media_ctx **ctx, struct vidsrc_prm *prm, -- const struct vidsz *size, const char *fmt, -- const char *dev, vidsrc_frame_h *frameh, -- vidsrc_error_h *errorh, void *arg) --{ -- struct config *cfg; -- struct vidsrc_st *st; -- char logo[256]; -- int err = 0; -- -- (void)ctx; -- (void)fmt; -- (void)dev; -- (void)errorh; -- (void)vs; -- -- if (!stp || !prm || !size || !frameh) -- return EINVAL; -- -- cfg = conf_config(); -- if (!cfg) -- return EINVAL; -- -- st = mem_zalloc(sizeof(*st), destructor); -- if (!st) -- return ENOMEM; -- -- st->frameh = frameh; -- st->arg = arg; -- st->prm = *prm; -- st->size = *size; -- -- st->surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, -- size->w, size->h); -- if (!st->surface) { -- err = ENOMEM; -- goto out; -- } -- -- st->cr = cairo_create(st->surface); -- if (!st->cr) { -- err = ENOMEM; -- goto out; -- } -- -- cairo_select_font_face(st->cr, "Sans", -- CAIRO_FONT_SLANT_NORMAL, -- CAIRO_FONT_WEIGHT_BOLD); -- -- info("cairo: surface with resolution %d x %d\n", -- cairo_image_surface_get_width(st->surface), -- cairo_image_surface_get_height(st->surface)); -- -- st->step = rand_u16() / 1000.0; -- -- re_snprintf(logo, sizeof(logo), "%s/logo.png", cfg->audio.audio_path); -- -- err = load_logo(st, logo); -- if (err) -- goto out; -- -- st->run = true; -- err = pthread_create(&st->thread, NULL, read_thread, st); -- if (err) { -- st->run = false; -- goto out; -- } -- -- out: -- if (err) -- mem_deref(st); -- else -- *stp = st; -- -- return err; --} -- -- --static int module_init(void) --{ -- return vidsrc_register(&vidsrc, baresip_vidsrcl(), -- "cairo", alloc, NULL); --} -- -- --static int module_close(void) --{ -- vidsrc = mem_deref(vidsrc); -- return 0; --} -- -- --EXPORT_SYM const struct mod_export DECL_EXPORTS(cairo) = { -- "cairo", -- "vidsrc", -- module_init, -- module_close --}; -diff --git a/modules/cairo/module.mk b/modules/cairo/module.mk -deleted file mode 100644 -index 01e3dc7cc..000000000 ---- a/modules/cairo/module.mk -+++ /dev/null -@@ -1,12 +0,0 @@ --# --# module.mk --# --# Copyright (C) 2010 Alfred E. Heggestad --# -- --MOD := cairo --$(MOD)_SRCS += cairo.c --$(MOD)_LFLAGS += $(shell pkg-config --libs cairo) --$(MOD)_CFLAGS += $(shell pkg-config --cflags cairo) -- --include mk/mod.mk -diff --git a/src/config.c b/src/config.c -index f12dc5a31..483d374c1 100644 ---- a/src/config.c -+++ b/src/config.c -@@ -911,7 +911,6 @@ int config_write_template(const char *file, const struct config *cfg) - (void)re_fprintf(f, "#module\t\t\t" "v4l2_codec" MOD_EXT "\n"); - #endif - (void)re_fprintf(f, "#module\t\t\t" "x11grab" MOD_EXT "\n"); -- (void)re_fprintf(f, "#module\t\t\t" "cairo" MOD_EXT "\n"); - (void)re_fprintf(f, "#module\t\t\t" "vidbridge" MOD_EXT "\n"); - - (void)re_fprintf(f, "\n# Video display modules\n"); diff --git a/baresip-1.1.0-module-oss.patch b/baresip-1.1.0-module-oss.patch deleted file mode 100644 index fc16525..0000000 --- a/baresip-1.1.0-module-oss.patch +++ /dev/null @@ -1,492 +0,0 @@ -From 0a1dc2492856a22a4551b02dc5a866322a7d514d Mon Sep 17 00:00:00 2001 -From: "Alfred E. Heggestad" -Date: Sat, 24 Apr 2021 13:23:12 +0200 -Subject: [PATCH] oss: remove deprecated module - -FreeBSD now supports ALSA and Portaudio which can be used instead. ---- - README.md | 2 - - mk/modules.mk | 7 - - modules/oss/module.mk | 18 -- - modules/oss/oss.c | 372 ------------------------------------------ - src/config.c | 4 +- - 5 files changed, 2 insertions(+), 401 deletions(-) - delete mode 100644 modules/oss/module.mk - delete mode 100644 modules/oss/oss.c - -diff --git a/README.md b/README.md -index d87a76564..f4afe0a8d 100644 ---- a/README.md -+++ b/README.md -@@ -88,7 +88,6 @@ Distributed under BSD license - - Gstreamer playbin input audio-driver - - JACK Audio Connection Kit audio-driver - - MacOSX/iOS coreaudio/audiounit audio-driver -- - Open Sound System (OSS) audio-driver - - Portaudio audio-driver - - Windows winwave audio-driver - -@@ -265,7 +264,6 @@ natpmp NAT Port Mapping Protocol (NAT-PMP) module - omx OpenMAX IL video display module - opensles OpenSLES audio driver - opus OPUS Interactive audio codec --oss Open Sound System (OSS) audio driver - pcp Port Control Protocol (PCP) module - plc Packet Loss Concealment (PLC) using spandsp - portaudio Portaudio driver -diff --git a/mk/modules.mk b/mk/modules.mk -index d4e53a337..6143edd90 100644 ---- a/mk/modules.mk -+++ b/mk/modules.mk -@@ -38,7 +38,6 @@ - # USE_OMX_BELLAGIO libomxil-bellagio xvideosink driver - # USE_OPUS Opus audio codec - # USE_OPUS_MS Opus multistream audio codec --# USE_OSS OSS audio driver - # USE_PLC Packet Loss Concealment - # USE_PORTAUDIO Portaudio audio driver - # USE_PULSE Pulseaudio audio driver -@@ -144,9 +143,6 @@ USE_OPUS := $(shell [ -f $(SYSROOT)/include/opus/opus.h ] || \ - USE_OPUS_MS := $(shell [ -f $(SYSROOT)/include/opus/opus_multistream.h ] || \ - [ -f $(SYSROOT_ALT)/include/opus/opus_multistream.h ] || \ - [ -f $(SYSROOT)/local/include/opus/opus_multistream.h ] && echo "yes") --USE_OSS := $(shell [ -f $(SYSROOT)/include/soundcard.h ] || \ -- [ -f $(SYSROOT)/include/linux/soundcard.h ] || \ -- [ -f $(SYSROOT)/include/sys/soundcard.h ] && echo "yes") - USE_PLC := $(shell [ -f $(SYSROOT)/include/spandsp/plc.h ] || \ - [ -f $(SYSROOT_ALT)/include/spandsp/plc.h ] || \ - [ -f $(SYSROOT_LOCAL)/include/spandsp/plc.h ] && echo "yes") -@@ -408,9 +404,6 @@ endif - ifneq ($(USE_OPUS),) - MODULES += opus - endif --ifneq ($(USE_OSS),) --MODULES += oss --endif - ifneq ($(USE_PLC),) - MODULES += plc - endif -diff --git a/modules/oss/module.mk b/modules/oss/module.mk -deleted file mode 100644 -index 109d34d63..000000000 ---- a/modules/oss/module.mk -+++ /dev/null -@@ -1,18 +0,0 @@ --# --# module.mk --# --# Copyright (C) 2010 Alfred E. Heggestad --# -- --MOD := oss --$(MOD)_SRCS += oss.c --$(MOD)_LFLAGS += -- --ifeq ($(OS), openbsd) --$(MOD)_LFLAGS += -lossaudio --endif --ifeq ($(OS), netbsd) --$(MOD)_LFLAGS += -lossaudio --endif -- --include mk/mod.mk -diff --git a/modules/oss/oss.c b/modules/oss/oss.c -deleted file mode 100644 -index 507b8af98..000000000 ---- a/modules/oss/oss.c -+++ /dev/null -@@ -1,372 +0,0 @@ --/** -- * @file oss.c Open Sound System (OSS) driver -- * -- * Copyright (C) 2010 Alfred E. Heggestad -- */ --#include --#include --#include --#include --#include --#include --#include --#include --#if defined(NETBSD) || defined(OPENBSD) --#include --#elif defined (LINUX) --#include --#else --#include --#endif --#ifdef SOLARIS --#include --#endif -- -- --/** -- * @defgroup oss oss -- * -- * Open Sound System (OSS) audio driver module -- * -- * -- * References: -- * -- * http://www.4front-tech.com/linux.html -- */ -- -- --struct ausrc_st { -- pthread_t thread; -- bool run; -- int fd; -- struct ausrc_prm prm; -- int16_t *sampv; -- size_t sampc; -- ausrc_read_h *rh; -- ausrc_error_h *errh; -- void *arg; --}; -- --struct auplay_st { -- pthread_t thread; -- bool run; -- int fd; -- int16_t *sampv; -- size_t sampc; -- auplay_write_h *wh; -- void *arg; --}; -- -- --static struct ausrc *ausrc; --static struct auplay *auplay; --static char oss_dev[64] = "/dev/dsp"; -- -- --/* -- * Automatically calculate the fragment size depending on sampling rate -- * and number of channels. More entries can be added to the table below. -- * -- * NOTE. Powermac 8200 and linux 2.4.18 gives: -- * SNDCTL_DSP_SETFRAGMENT: Invalid argument -- */ --static int set_fragment(int fd, uint32_t sampc) --{ -- static const struct { -- uint16_t max; -- uint16_t size; -- } fragv[] = { -- {10, 7}, /* 10 x 2^7 = 1280 = 4 x 320 */ -- {15, 7}, /* 15 x 2^7 = 1920 = 6 x 320 */ -- {20, 7}, /* 20 x 2^7 = 2560 = 8 x 320 */ -- {25, 7}, /* 25 x 2^7 = 3200 = 10 x 320 */ -- {15, 8}, /* 15 x 2^8 = 3840 = 12 x 320 */ -- {20, 8}, /* 20 x 2^8 = 5120 = 16 x 320 */ -- {25, 8} /* 25 x 2^8 = 6400 = 20 x 320 */ -- }; -- size_t i; -- const uint32_t buf_size = 2 * sampc; -- -- for (i=0; irun) { -- st->run = false; -- pthread_join(st->thread, NULL); -- } -- -- if (-1 != st->fd) { -- (void)close(st->fd); -- } -- -- mem_deref(st->sampv); --} -- -- --static void ausrc_destructor(void *arg) --{ -- struct ausrc_st *st = arg; -- -- if (st->run) { -- st->run = false; -- pthread_join(st->thread, NULL); -- } -- -- if (-1 != st->fd) { -- (void)close(st->fd); -- } -- -- mem_deref(st->sampv); --} -- -- --static void *record_thread(void *arg) --{ -- struct ausrc_st *st = arg; -- struct auframe af; -- uint64_t sampc = 0; -- int n; -- -- while (st->run) { -- -- n = (int)read(st->fd, st->sampv, st->sampc*2); -- if (n <= 0) -- continue; -- -- af.fmt = AUFMT_S16LE; -- af.sampv = st->sampv; -- af.sampc = n/2; -- af.timestamp = sampc * AUDIO_TIMEBASE / st->prm.srate; -- -- sampc += n/2; -- -- st->rh(&af, st->arg); -- } -- -- return NULL; --} -- -- --static void *play_thread(void *arg) --{ -- struct auplay_st *st = arg; -- struct auframe af; -- int n; -- -- auframe_init(&af, AUFMT_S16LE, st->sampv, st->sampc); -- -- while (st->run) { -- -- st->wh(&af, st->arg); -- -- n = (int)write(st->fd, st->sampv, st->sampc*2); -- if (n < 0) { -- warning("oss: write: %m\n", errno); -- break; -- } -- } -- -- return NULL; --} -- -- --static int src_alloc(struct ausrc_st **stp, const struct ausrc *as, -- struct media_ctx **ctx, -- struct ausrc_prm *prm, const char *device, -- ausrc_read_h *rh, ausrc_error_h *errh, void *arg) --{ -- struct ausrc_st *st; -- int err; -- -- (void)ctx; -- (void)errh; -- -- if (!stp || !as || !prm || prm->fmt != AUFMT_S16LE || !rh) -- return EINVAL; -- -- st = mem_zalloc(sizeof(*st), ausrc_destructor); -- if (!st) -- return ENOMEM; -- -- st->fd = -1; -- st->rh = rh; -- st->errh = errh; -- st->arg = arg; -- -- if (!device) -- device = oss_dev; -- -- st->prm = *prm; -- st->sampc = prm->srate * prm->ch * prm->ptime / 1000; -- -- st->sampv = mem_alloc(2 * st->sampc, NULL); -- if (!st->sampv) { -- err = ENOMEM; -- goto out; -- } -- -- st->fd = open(device, O_RDONLY); -- if (st->fd < 0) { -- err = errno; -- goto out; -- } -- -- err = oss_reset(st->fd, prm->srate, prm->ch, (int)st->sampc, 0); -- if (err) -- goto out; -- -- st->run = true; -- err = pthread_create(&st->thread, NULL, record_thread, st); -- if (err) { -- st->run = false; -- goto out; -- } -- -- out: -- if (err) -- mem_deref(st); -- else -- *stp = st; -- -- return err; --} -- -- --static int play_alloc(struct auplay_st **stp, const struct auplay *ap, -- struct auplay_prm *prm, const char *device, -- auplay_write_h *wh, void *arg) --{ -- struct auplay_st *st; -- int err; -- -- if (!stp || !ap || !prm || prm->fmt != AUFMT_S16LE || !wh) -- return EINVAL; -- -- st = mem_zalloc(sizeof(*st), auplay_destructor); -- if (!st) -- return ENOMEM; -- -- st->fd = -1; -- st->wh = wh; -- st->arg = arg; -- -- if (!device) -- device = oss_dev; -- -- st->sampc = prm->srate * prm->ch * prm->ptime / 1000; -- -- st->sampv = mem_alloc(st->sampc * 2, NULL); -- if (!st->sampv) { -- err = ENOMEM; -- goto out; -- } -- -- st->fd = open(device, O_WRONLY); -- if (st->fd < 0) { -- err = errno; -- goto out; -- } -- -- err = oss_reset(st->fd, prm->srate, prm->ch, (int)st->sampc, 0); -- if (err) -- goto out; -- -- st->run = true; -- err = pthread_create(&st->thread, NULL, play_thread, st); -- if (err) { -- st->run = false; -- goto out; -- } -- -- out: -- if (err) -- mem_deref(st); -- else -- *stp = st; -- -- return err; --} -- -- --static int module_init(void) --{ -- int err; -- -- err = ausrc_register(&ausrc, baresip_ausrcl(), "oss", src_alloc); -- err |= auplay_register(&auplay, baresip_auplayl(), "oss", play_alloc); -- -- return err; --} -- -- --static int module_close(void) --{ -- ausrc = mem_deref(ausrc); -- auplay = mem_deref(auplay); -- -- return 0; --} -- -- --EXPORT_SYM const struct mod_export DECL_EXPORTS(oss) = { -- "oss", -- "audio", -- module_init, -- module_close, --}; -diff --git a/src/config.c b/src/config.c -index 6a2e53c06..bf1d99db6 100644 ---- a/src/config.c -+++ b/src/config.c -@@ -542,7 +542,7 @@ static const char *default_audio_device(void) - return "coreaudio,default"; - #endif - #elif defined (FREEBSD) -- return "oss,/dev/dsp"; -+ return "alsa,default"; - #elif defined (OPENBSD) - return "sndio,default"; - #elif defined (WIN32) -@@ -865,7 +865,7 @@ int config_write_template(const char *file, const struct config *cfg) - (void)re_fprintf(f, "#module\t\t\t" "audiounit" MOD_EXT "\n"); - #endif - #elif defined (FREEBSD) -- (void)re_fprintf(f, "module\t\t\t" "oss" MOD_EXT "\n"); -+ (void)re_fprintf(f, "module\t\t\t" "alsa" MOD_EXT "\n"); - #elif defined (OPENBSD) - (void)re_fprintf(f, "module\t\t\t" "sndio" MOD_EXT "\n"); - #elif defined (WIN32) diff --git a/baresip.spec b/baresip.spec index 0c15dce..e6b6e7f 100644 --- a/baresip.spec +++ b/baresip.spec @@ -1,7 +1,7 @@ Summary: Modular SIP user-agent with audio and video support Name: baresip -Version: 1.1.0 -Release: 8%{?dist} +Version: 2.0.0 +Release: 1%{?dist} License: BSD URL: https://github.com/baresip/baresip Source0: https://github.com/baresip/baresip/archive/v%{version}/%{name}-%{version}.tar.gz @@ -11,19 +11,16 @@ Source11: https://gitlab.gnome.org/GNOME/adwaita-icon-theme/-/raw/1e1d6921 Source12: https://gitlab.gnome.org/GNOME/adwaita-icon-theme/-/raw/master/COPYING#/COPYING.adwaita-icon-theme Source13: https://gitlab.gnome.org/GNOME/adwaita-icon-theme/-/raw/master/COPYING_CCBYSA3#/COPYING_CCBYSA3.adwaita-icon-theme Source14: https://gitlab.gnome.org/GNOME/adwaita-icon-theme/-/raw/master/COPYING_LGPL#/COPYING_LGPL.adwaita-icon-theme -Patch0: https://github.com/baresip/baresip/commit/68fd6b29d34380f74ea69b32cf055639ae2b7a35.patch#/baresip-1.1.0-call-history.patch -Patch1: https://github.com/baresip/baresip/commit/b0669e837daefeaff482a04d6dc15df1c6ebc0f0.patch#/baresip-1.1.0-fritzbox2baresip.patch -Patch2: https://github.com/baresip/baresip/commit/01804dcfaf77e298a3f7bdc3d4cfe0882bf681cd.patch#/baresip-1.1.0-module-cairo.patch -Patch3: https://github.com/baresip/baresip/commit/0a1dc2492856a22a4551b02dc5a866322a7d514d.patch#/baresip-1.1.0-module-oss.patch -Patch4: https://github.com/baresip/baresip/commit/6b54370a48287662daae5721782978662095a9e4.patch#/baresip-1.1.0-attended-transfer.patch BuildRequires: make BuildRequires: gcc -BuildRequires: libre-devel >= 2.0.0 +BuildRequires: libre-devel >= 2.1.0 BuildRequires: librem-devel >= 1.0.0 %if 0%{?fedora} || 0%{?rhel} >= 8 BuildRequires: openssl-devel >= 1.1.0 %else BuildRequires: openssl11-devel +# Atomic support in libre >= 2.1.0 +BuildRequires: devtoolset-8-toolchain %endif %if 0%{?fedora} || (0%{?rhel} && 0%{?rhel} > 7) Recommends: %{name}-pulse%{?_isa} = %{version}-%{release} @@ -31,18 +28,22 @@ Recommends: %{name}-pulse%{?_isa} = %{version}-%{release} Requires: %{name}-pulse%{?_isa} = %{version}-%{release} %endif Obsoletes: %{name}-cairo < 1.1.0-1 +Obsoletes: %{name}-rst < 2.0.0-1 +Obsoletes: %{name}-speex_pp < 2.0.0-1 +Obsoletes: %{name}-x11grab < 2.0.0-1 %description A modular SIP user-agent with support for audio and video, and many IETF -standards such as SIP, RTP, STUN, TURN, and ICE for both, IPv4 and IPv6. +standards such as SIP, SDP, RTP/RTCP and STUN/TURN/ICE for both, IPv4 and +IPv6. -Additional modules provide support for audio codecs like G.711, G.722, -G.726, GSM, L16, MPA, and Opus, audio drivers like ALSA, GStreamer, JACK -Audio Connection Kit, Portaudio, and PulseAudio, video codecs like VP8 or -VP9, video sources like Video4Linux and X11 grabber, video outputs like -SDL2 or X11, NAT traversal via STUN, TURN, ICE, NATBD, and NAT-PMP, media -encryption via SRTP or DTLS-SRTP, management features like embedded web- -server with HTTP interface, command-line console and interface, and MQTT. +Additional modules provide support for audio codecs like Codec2, G.711, +G.722, G.726, GSM, L16, MPA and Opus, audio drivers like ALSA, GStreamer, +JACK Audio Connection Kit, Portaudio, and PulseAudio, video codecs like +AV1, VP8 or VP9, video sources like Video4Linux, video outputs like SDL2 +or X11, NAT traversal via STUN, TURN, ICE, and NAT-PMP, media encryption +via TLS, SRTP or DTLS-SRTP, management features like embedded web-server +with HTTP interface, command-line console and interface, and MQTT. %if 0%{?fedora} %package aac @@ -67,6 +68,17 @@ Baresip is a modular SIP user-agent with audio and video support. This module provides the Advanced Linux Sound Architecture (ALSA) audio driver. +%package av1 +Summary: AV1 video codec module for baresip +BuildRequires: libaom-devel +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description av1 +Baresip is a modular SIP user-agent with audio and video support. + +This module provides the AV1 video codec, an open, royalty-free video +coding format developed as a successor to the VP9 video codec. + %package codec2 Summary: Codec 2 audio codec module for baresip BuildRequires: codec2-devel @@ -265,18 +277,6 @@ Baresip is a modular SIP user-agent with audio and video support. This module provides the PulseAudio audio driver. -%package rst -Summary: Radio streamer audio/video source driver for baresip -BuildRequires: pkgconfig(cairo) -BuildRequires: pkgconfig(libmpg123) -Requires: %{name}%{?_isa} = %{version}-%{release} - -%description rst -Baresip is a modular SIP user-agent with audio and video support. - -This module uses mpg123 to play streaming media (MP3) and provide them as -an internal audio/video source. - %package sdl Summary: SDL2 video output driver for baresip BuildRequires: SDL2-devel @@ -310,20 +310,6 @@ Baresip is a modular SIP user-agent with audio and video support. This module provides an audio dumper to write WAV audio sample files using libsndfile. -%package speex_pp -Summary: Audio pre-processor module using libspeexdsp for baresip -%if 0%{?fedora} || (0%{?rhel} && 0%{?rhel} > 7) -BuildRequires: speexdsp-devel -%else -BuildRequires: speex-devel -%endif -Requires: %{name}%{?_isa} = %{version}-%{release} - -%description speex_pp -Baresip is a modular SIP user-agent with audio and video support. - -This module provides an audio pre-processor using libspeexdsp. - %package tools Summary: Collection of tools and helper scripts for baresip BuildRequires: python3-devel @@ -357,15 +343,14 @@ This module provides the VP9 video codec, which is compatible with the WebRTC standard. %package v4l2 -Summary: Video4Linux video source and codec modules for baresip +Summary: Video4Linux video source driver for baresip BuildRequires: libv4l-devel Requires: %{name}%{?_isa} = %{version}-%{release} %description v4l2 Baresip is a modular SIP user-agent with audio and video support. -These modules provide the Video4Linux video source and codec, where -latter is for devices that support compressed formats such as H.264. +This module provides the Video4Linux video source driver. %package x11 Summary: X11 video output driver for baresip @@ -378,28 +363,16 @@ Baresip is a modular SIP user-agent with audio and video support. This module provides the X11 video output driver. -%package x11grab -Summary: X11 grabber video source driver for baresip -BuildRequires: libX11-devel -BuildRequires: libXext-devel -Requires: %{name}%{?_isa} = %{version}-%{release} - -%description x11grab -Baresip is a modular SIP user-agent with audio and video support. - -This module provides the X11 grabber video source driver. - %prep %setup -q -%patch0 -p1 -b .call-history -%patch1 -p1 -b .fritzbox2baresip -%patch2 -p1 -b .module-cairo -%patch3 -p1 -b .module-oss -%patch4 -p1 -b .attended-transfer +# https://github.com/baresip/baresip/issues/1770 +sed -e '/^\$(MOD)\.html/d' -i modules/ctrl_dbus/module.mk %build %if 0%{?rhel} == 7 -sed -e 's|\(openssl\)|openssl11/\1|g' -i mk/modules.mk +. /opt/rh/devtoolset-8/enable +RPM_OPT_FLAGS="$RPM_OPT_FLAGS $(pkg-config --cflags-only-I openssl11)" +RPM_LD_FLAGS="$RPM_LD_FLAGS $(pkg-config --libs-only-L openssl11)" %endif %make_build \ @@ -435,7 +408,16 @@ gtk-encode-symbolic-svg %{SOURCE11} 16x16 -o $RPM_BUILD_ROOT%{_datadir}/icons/Ad install -p -m 0755 tools/fritzbox2%{name} $RPM_BUILD_ROOT%{_bindir}/fritzbox2%{name} %check -make test +%if 0%{?rhel} == 7 +. /opt/rh/devtoolset-8/enable +RPM_OPT_FLAGS="$RPM_OPT_FLAGS $(pkg-config --cflags-only-I openssl11)" +RPM_LD_FLAGS="$RPM_LD_FLAGS $(pkg-config --libs-only-L openssl11)" +%endif + +make test \ + SHELL='sh -x' \ + EXTRA_CFLAGS="$RPM_OPT_FLAGS" \ + EXTRA_LFLAGS="$RPM_LD_FLAGS" %if 0%{?rhel} == 7 %post gtk @@ -467,10 +449,10 @@ gtk-update-icon-cache --force %{_datadir}/icons/Adwaita &>/dev/null || : %dir %{_libdir}/%{name}/modules/ %{_libdir}/%{name}/modules/account.so %{_libdir}/%{name}/modules/aubridge.so +%{_libdir}/%{name}/modules/auconv.so %{_libdir}/%{name}/modules/aufile.so -%{_libdir}/%{name}/modules/auloop.so +%{_libdir}/%{name}/modules/auresamp.so %{_libdir}/%{name}/modules/ausine.so -%{_libdir}/%{name}/modules/b2bua.so %{_libdir}/%{name}/modules/cons.so %{_libdir}/%{name}/modules/contact.so %{_libdir}/%{name}/modules/ctrl_tcp.so @@ -487,9 +469,11 @@ gtk-update-icon-cache --force %{_datadir}/icons/Adwaita &>/dev/null || : %{_libdir}/%{name}/modules/l16.so %{_libdir}/%{name}/modules/menu.so %{_libdir}/%{name}/modules/mixausrc.so +%{_libdir}/%{name}/modules/mixminus.so %{_libdir}/%{name}/modules/multicast.so %{_libdir}/%{name}/modules/mwi.so %{_libdir}/%{name}/modules/natpmp.so +%{_libdir}/%{name}/modules/netroam.so %{_libdir}/%{name}/modules/presence.so %{_libdir}/%{name}/modules/rtcpsummary.so %{_libdir}/%{name}/modules/selfview.so @@ -502,7 +486,6 @@ gtk-update-icon-cache --force %{_datadir}/icons/Adwaita &>/dev/null || : %{_libdir}/%{name}/modules/uuid.so %{_libdir}/%{name}/modules/vidbridge.so %{_libdir}/%{name}/modules/vidinfo.so -%{_libdir}/%{name}/modules/vidloop.so %{_libdir}/%{name}/modules/vumeter.so %{_datadir}/%{name}/ @@ -514,6 +497,9 @@ gtk-update-icon-cache --force %{_datadir}/icons/Adwaita &>/dev/null || : %files alsa %{_libdir}/%{name}/modules/alsa.so +%files av1 +%{_libdir}/%{name}/modules/av1.so + %files codec2 %{_libdir}/%{name}/modules/codec2.so @@ -574,9 +560,6 @@ gtk-update-icon-cache --force %{_datadir}/icons/Adwaita &>/dev/null || : %files pulse %{_libdir}/%{name}/modules/pulse.so -%files rst -%{_libdir}/%{name}/modules/rst.so - %files sdl %{_libdir}/%{name}/modules/sdl.so @@ -586,15 +569,11 @@ gtk-update-icon-cache --force %{_datadir}/icons/Adwaita &>/dev/null || : %files sndfile %{_libdir}/%{name}/modules/sndfile.so -%files speex_pp -%{_libdir}/%{name}/modules/speex_pp.so - %files tools %{_bindir}/fritzbox2%{name} %files v4l2 %{_libdir}/%{name}/modules/v4l2.so -%{_libdir}/%{name}/modules/v4l2_codec.so %files vp8 %{_libdir}/%{name}/modules/vp8.so @@ -605,10 +584,10 @@ gtk-update-icon-cache --force %{_datadir}/icons/Adwaita &>/dev/null || : %files x11 %{_libdir}/%{name}/modules/x11.so -%files x11grab -%{_libdir}/%{name}/modules/x11grab.so - %changelog +* Sun Mar 13 2022 Robert Scheck 2.0.0-1 +- Upgrade to 2.0.0 (#2063451) + * Thu Jan 27 2022 Tom Callaway - 1.1.0-8 - rebuild for libvpx diff --git a/sources b/sources index c81acf4..351b7a4 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ -SHA512 (baresip-1.1.0.tar.gz) = 82616ddfb344c4a48f742a92e9fcdc1fdd3b281950fadee0f3c3c6401d6f31e2232e9a64e5aa0bd8fc54dec02ad4c4573ff6c5a71c0929d89f83e136d35f2a3a +SHA512 (baresip-2.0.0.tar.gz) = 6a02b423189a1a5bc267acd5a8162919b30cc2a88acd4fa571b12e2bf8c40abd7757e32742b1824957731bce79680abfa9078271de1865d7a90fd84094e398a3 SHA512 (call-incoming-symbolic.svg) = 49b6422efff9986dd4a18b34df4ab185b01b46c44ab5b8c1d45ab1ca25694cb42e73428b0a69e5fe2eb61c4e7a7aba9c0df82b5e0290f45950f3942be63bf987 SHA512 (call-outgoing-symbolic.svg) = 142cf668d977e3a709d3c13e01d86fdd09e501affd1756df3000de84581c55b3b5082758b32a73ae0e47f45233cc7e55609f3e54effbba01666ca97d5a55fdaa SHA512 (COPYING.adwaita-icon-theme) = e8963bab4d94d9fbcfc930b95164afff9502e4e53209104f4836fcd6dab2c2e9f105c9f9a17b43bc9502903c9c7b2e0880dacf2339cbe110a19654f13742e20a