Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
BC
public
belle-sip
Commits
c7b75331
Commit
c7b75331
authored
Jan 09, 2013
by
jehan
Browse files
add a parameter to retrieve auth info for pending authetication
parent
e17f7cb6
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
29 additions
and
9 deletions
+29
-9
include/belle-sip/headers.h
include/belle-sip/headers.h
+7
-0
include/belle-sip/listener.h
include/belle-sip/listener.h
+1
-0
include/belle-sip/provider.h
include/belle-sip/provider.h
+3
-1
src/belle_sip_headers_impl.c
src/belle_sip_headers_impl.c
+4
-1
src/provider.c
src/provider.c
+9
-2
src/refresher.c
src/refresher.c
+2
-2
src/transaction.c
src/transaction.c
+1
-1
tester/belle_sip_register_tester.c
tester/belle_sip_register_tester.c
+2
-2
No files found.
include/belle-sip/headers.h
View file @
c7b75331
...
...
@@ -142,6 +142,13 @@ belle_sip_header_contact_t* belle_sip_header_contact_create (const belle_sip_hea
* */
unsigned
int
belle_sip_header_contact_equals
(
const
belle_sip_header_contact_t
*
a
,
const
belle_sip_header_contact_t
*
b
);
/** Contact heaader equality function, same as #belle_sip_header_contact_equals but return 0 if equals, very useful with #belle_sip_list
* @return 0 if equals
*
* */
unsigned
int
belle_sip_header_contact_not_equals
(
const
belle_sip_header_contact_t
*
a
,
const
belle_sip_header_contact_t
*
b
);
#define BELLE_SIP_RANDOM_TAG ((const char*)-1)
#define BELLE_SIP_HEADER_CONTACT(t) BELLE_SIP_CAST(t,belle_sip_header_contact_t)
#define BELLE_SIP_CONTACT "Contact"
...
...
include/belle-sip/listener.h
View file @
c7b75331
...
...
@@ -55,6 +55,7 @@ belle_sip_dialog_t *belle_sip_request_event_get_dialog(const belle_sip_request_e
belle_sip_dialog_t
*
belle_sip_dialog_terminated_get_dialog
(
const
belle_sip_dialog_terminated_event_t
*
event
);
/*auth event*/
void
belle_sip_auth_event_destroy
(
belle_sip_auth_event_t
*
event
);
const
char
*
belle_sip_auth_event_get_username
(
const
belle_sip_auth_event_t
*
event
);
void
belle_sip_auth_event_set_username
(
belle_sip_auth_event_t
*
event
,
const
char
*
value
);
...
...
include/belle-sip/provider.h
View file @
c7b75331
...
...
@@ -55,10 +55,12 @@ void belle_sip_provider_send_response(belle_sip_provider_t *p, belle_sip_respons
* @param p object
* @param request to be updated
* @param resp response to take authentication values from, might be NULL
* @param auth_infos if auth infos cannot be added for an authenticate header, (I.E case where this method return TRUE),
* a newly allocated belle_sip_auth_info_t object is added to this list. These object contains useful information like realm and username.
* @returns 0 in case of success,
*
* */
int
belle_sip_provider_add_authorization
(
belle_sip_provider_t
*
p
,
belle_sip_request_t
*
request
,
belle_sip_response_t
*
resp
);
int
belle_sip_provider_add_authorization
(
belle_sip_provider_t
*
p
,
belle_sip_request_t
*
request
,
belle_sip_response_t
*
resp
,
belle_sip_list_t
**
auth_infos
);
BELLE_SIP_END_DECLS
...
...
src/belle_sip_headers_impl.c
View file @
c7b75331
...
...
@@ -240,9 +240,12 @@ float belle_sip_header_contact_get_qvalue(const belle_sip_header_contact_t* cont
}
unsigned
int
belle_sip_header_contact_equals
(
const
belle_sip_header_contact_t
*
a
,
const
belle_sip_header_contact_t
*
b
)
{
if
(
!
a
|
!
b
)
return
0
;
return
!
belle_sip_uri_equals
(
belle_sip_header_address_get_uri
(
BELLE_SIP_HEADER_ADDRESS
(
a
))
return
belle_sip_uri_equals
(
belle_sip_header_address_get_uri
(
BELLE_SIP_HEADER_ADDRESS
(
a
))
,
belle_sip_header_address_get_uri
(
BELLE_SIP_HEADER_ADDRESS
(
b
)));
}
unsigned
int
belle_sip_header_contact_not_equals
(
const
belle_sip_header_contact_t
*
a
,
const
belle_sip_header_contact_t
*
b
)
{
return
!
belle_sip_header_contact_equals
(
a
,
b
);
}
/**************************
* From header object inherent from header_address
****************************
...
...
src/provider.c
View file @
c7b75331
...
...
@@ -598,7 +598,7 @@ static void belle_sip_provider_update_or_create_auth_context(belle_sip_provider
if
(
auth_context_lst
)
belle_sip_free
(
auth_context_lst
);
return
;
}
int
belle_sip_provider_add_authorization
(
belle_sip_provider_t
*
p
,
belle_sip_request_t
*
request
,
belle_sip_response_t
*
resp
)
{
int
belle_sip_provider_add_authorization
(
belle_sip_provider_t
*
p
,
belle_sip_request_t
*
request
,
belle_sip_response_t
*
resp
,
belle_sip_list_t
**
auth_infos
)
{
belle_sip_header_call_id_t
*
call_id
;
belle_sip_list_t
*
auth_context_lst
;
belle_sip_list_t
*
authenticate_lst
;
...
...
@@ -688,11 +688,18 @@ int belle_sip_provider_add_authorization(belle_sip_provider_t *p, belle_sip_requ
}
else
belle_sip_message_add_header
(
BELLE_SIP_MESSAGE
(
request
),
BELLE_SIP_HEADER
(
authorization
));
result
=
1
;
belle_sip_auth_event_destroy
(
auth_event
);
}
else
{
belle_sip_message
(
"No auth info found for call id [%s]"
,
belle_sip_header_call_id_get_call_id
(
call_id
));
}
if
(
auth_infos
)
{
/*stored to give user information on realm/username which requires authentications*/
*
auth_infos
=
belle_sip_list_append
(
*
auth_infos
,
auth_event
);
}
else
{
belle_sip_auth_event_destroy
(
auth_event
);
}
}
}
belle_sip_list_free
(
head
);
}
else
{
/*nothing to do*/
...
...
src/refresher.c
View file @
c7b75331
...
...
@@ -129,7 +129,7 @@ static int refresh(belle_sip_refresher_t* refresher) {
belle_sip_header_expires_set_expires
(
expires_header
,
refresher
->
expires
);
}
belle_sip_provider_add_authorization
(
prov
,
request
,
NULL
);
belle_sip_provider_add_authorization
(
prov
,
request
,
NULL
,
NULL
);
}
else
{
belle_sip_error
(
"Unexpected dialog state [%s] for dialog [%p], cannot refresh [%s]"
,
belle_sip_dialog_state_to_string
(
belle_sip_dialog_get_state
(
dialog
))
...
...
@@ -175,7 +175,7 @@ static belle_sip_header_contact_t* get_matching_contact(const belle_sip_transact
contact_header_list
=
belle_sip_message_get_headers
(
BELLE_SIP_MESSAGE
(
response
),
BELLE_SIP_CONTACT
);
if
(
contact_header_list
)
{
contact_header_list
=
belle_sip_list_find_custom
((
belle_sip_list_t
*
)
contact_header_list
,(
belle_sip_compare_func
)
belle_sip_header_contact_equals
,(
belle_sip_compare_func
)
belle_sip_header_contact_
not_
equals
,
(
const
void
*
)
local_contact
);
if
(
!
contact_header_list
)
{
char
*
contact_string
=
belle_sip_object_to_string
(
BELLE_SIP_OBJECT
(
local_contact
));
...
...
src/transaction.c
View file @
c7b75331
...
...
@@ -398,7 +398,7 @@ belle_sip_request_t* belle_sip_client_transaction_create_authenticated_request(b
belle_sip_message_add_header
(
BELLE_SIP_MESSAGE
(
req
),
BELLE_SIP_HEADER
(
t
->
preset_route
));
}
/*put auth header*/
belle_sip_provider_add_authorization
(
t
->
base
.
provider
,
req
,
t
->
base
.
last_response
);
belle_sip_provider_add_authorization
(
t
->
base
.
provider
,
req
,
t
->
base
.
last_response
,
NULL
);
return
req
;
}
tester/belle_sip_register_tester.c
View file @
c7b75331
...
...
@@ -55,7 +55,7 @@ static void process_response_event(belle_sip_listener_t *obj, const belle_sip_re
request
=
belle_sip_transaction_get_request
(
BELLE_SIP_TRANSACTION
(
belle_sip_response_event_get_client_transaction
(
event
)));
belle_sip_header_cseq_t
*
cseq
=
(
belle_sip_header_cseq_t
*
)
belle_sip_message_get_header
(
BELLE_SIP_MESSAGE
(
request
),
BELLE_SIP_CSEQ
);
belle_sip_header_cseq_set_seq_number
(
cseq
,
belle_sip_header_cseq_get_seq_number
(
cseq
)
+
1
);
CU_ASSERT_TRUE_FATAL
(
belle_sip_provider_add_authorization
(
prov
,
request
,
belle_sip_response_event_get_response
(
event
)));
CU_ASSERT_TRUE_FATAL
(
belle_sip_provider_add_authorization
(
prov
,
request
,
belle_sip_response_event_get_response
(
event
)
,
NULL
));
belle_sip_client_transaction_t
*
t
=
belle_sip_provider_create_client_transaction
(
prov
,
request
);
belle_sip_client_transaction_send_request
(
t
);
number_of_challange
++
;
...
...
@@ -151,7 +151,7 @@ void unregister_user(belle_sip_stack_t * stack
if
(
use_transaction
){
belle_sip_message_remove_header
(
BELLE_SIP_MESSAGE
(
req
),
BELLE_SIP_AUTHORIZATION
);
belle_sip_message_remove_header
(
BELLE_SIP_MESSAGE
(
req
),
BELLE_SIP_PROXY_AUTHORIZATION
);
belle_sip_provider_add_authorization
(
prov
,
req
,
NULL
);
/*just in case*/
belle_sip_provider_add_authorization
(
prov
,
req
,
NULL
,
NULL
);
/*just in case*/
belle_sip_client_transaction_t
*
t
=
belle_sip_provider_create_client_transaction
(
prov
,
req
);
belle_sip_client_transaction_send_request
(
t
);
}
else
belle_sip_provider_send_request
(
prov
,
req
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment