Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
libnice
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
libnice
Commits
9a18da4c
Commit
9a18da4c
authored
Jul 24, 2008
by
Youness Alaoui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updated unit tests for new API of stun usages
parent
ca2acb6c
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
133 additions
and
178 deletions
+133
-178
stun/tests/test-bind.c
stun/tests/test-bind.c
+104
-82
stun/tests/test-conncheck.c
stun/tests/test-conncheck.c
+29
-96
No files found.
stun/tests/test-bind.c
View file @
9a18da4c
...
...
@@ -97,8 +97,8 @@ static void bad_family (void)
addr
.
sa_len
=
sizeof
(
addr
);
#endif
val
=
stun_
bind_run
(
-
1
,
&
addr
,
sizeof
(
addr
),
&
dummy
,
&
(
socklen_t
){
sizeof
(
dummy
)
}
,
0
);
val
=
stun_
usage_bind_run
(
&
addr
,
sizeof
(
addr
),
&
dummy
,
&
(
socklen_t
){
sizeof
(
dummy
)
});
assert
(
val
!=
0
);
}
...
...
@@ -115,9 +115,9 @@ static void small_srv_addr (void)
addr
.
sa_len
=
sizeof
(
addr
);
#endif
val
=
stun_
bind_run
(
-
1
,
&
addr
,
1
,
&
dummy
,
&
(
socklen_t
){
sizeof
(
dummy
)
}
,
0
);
assert
(
val
==
EINVAL
);
val
=
stun_
usage_bind_run
(
&
addr
,
1
,
&
dummy
,
&
(
socklen_t
){
sizeof
(
dummy
)
});
assert
(
val
==
STUN_USAGE_BIND_RETURN_ERROR
);
}
...
...
@@ -128,14 +128,11 @@ static void big_srv_addr (void)
struct
sockaddr
dummy
;
int
fd
,
val
;
fd
=
socket
(
AF_INET
,
SOCK_DGRAM
,
0
);
assert
(
fd
!=
-
1
);
memset
(
buf
,
0
,
sizeof
(
buf
));
val
=
stun_bind_run
(
fd
,
(
struct
sockaddr
*
)
buf
,
sizeof
(
buf
),
&
dummy
,
&
(
socklen_t
){
sizeof
(
dummy
)
},
0
);
assert
(
val
==
ENOBUFS
);
close
(
fd
);
val
=
stun_usage_bind_run
((
struct
sockaddr
*
)
buf
,
sizeof
(
buf
),
&
dummy
,
&
(
socklen_t
){
sizeof
(
dummy
)
});
assert
(
val
==
STUN_USAGE_BIND_RETURN_ERROR
);
}
...
...
@@ -154,22 +151,37 @@ static void timeout (void)
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
srv
,
&
srvlen
);
assert
(
val
==
0
);
val
=
stun_
bind_run
(
-
1
,
(
struct
sockaddr
*
)
&
srv
,
srvlen
,
&
dummy
,
&
(
socklen_t
){
sizeof
(
dummy
)
}
,
0
);
assert
(
val
==
ETIMED
OUT
);
val
=
stun_
usage_bind_run
(
(
struct
sockaddr
*
)
&
srv
,
srvlen
,
&
dummy
,
&
(
socklen_t
){
sizeof
(
dummy
)
});
assert
(
val
==
STUN_USAGE_BIND_RETURN_TIME
OUT
);
close
(
servfd
);
}
/** Malformed responses test */
static
void
bad_responses
(
void
)
{
stun_bind_t
*
ctx
;
struct
sockaddr_storage
addr
;
socklen_t
addrlen
=
sizeof
(
addr
);
ssize_t
val
,
len
;
uint8_t
buf
[
1000
];
uint8_t
buf
[
STUN_MAX_MESSAGE_SIZE
];
uint8_t
req
[
STUN_MAX_MESSAGE_SIZE
];
size_t
req_len
;
StunAgent
agent
;
StunMessage
msg
;
StunMessage
req_msg
;
uint16_t
known_attributes
[]
=
{
STUN_ATTRIBUTE_MAPPED_ADDRESS
,
STUN_ATTRIBUTE_XOR_MAPPED_ADDRESS
,
STUN_ATTRIBUTE_XOR_INTERNAL_ADDRESS
,
STUN_ATTRIBUTE_PRIORITY
,
STUN_ATTRIBUTE_USERNAME
,
STUN_ATTRIBUTE_MESSAGE_INTEGRITY
,
STUN_ATTRIBUTE_ERROR_CODE
,
0
};
stun_agent_init
(
&
agent
,
known_attributes
,
STUN_COMPATIBILITY_3489BIS
,
0
);
/* Allocate a local UDP port */
int
servfd
=
listen_dgram
(),
fd
;
...
...
@@ -181,8 +193,12 @@ static void bad_responses (void)
fd
=
socket
(
addr
.
ss_family
,
SOCK_DGRAM
,
0
);
assert
(
fd
!=
-
1
);
val
=
stun_bind_start
(
&
ctx
,
fd
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
,
0
);
assert
(
val
==
0
);
req_len
=
stun_usage_bind_create
(
&
agent
,
&
req_msg
,
req
,
sizeof
(
req
));
assert
(
req_len
>
0
);
val
=
sendto
(
fd
,
req
,
req_len
,
MSG_DONTWAIT
|
MSG_NOSIGNAL
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
);
assert
(
val
>=
0
);
/* Send to/receive from our client instance only */
val
=
getsockname
(
fd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
...
...
@@ -191,54 +207,47 @@ static void bad_responses (void)
val
=
connect
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
);
assert
(
val
==
0
);
/* Send crap response */
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
0
);
val
=
stun_bind_process
(
ctx
,
"foobar"
,
6
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
EAGAIN
);
/* Send request instead of response */
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
0
);
len
=
recv
(
servfd
,
buf
,
1000
,
MSG_DONTWAIT
);
assert
(
len
>=
20
);
val
=
stun_bind_process
(
ctx
,
buf
,
len
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
EAGAIN
);
assert
(
stun_agent_validate
(
&
agent
,
&
msg
,
buf
,
len
,
NULL
,
NULL
)
==
STUN_VALIDATION_SUCCESS
);
val
=
stun_usage_bind_process
(
&
msg
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
STUN_USAGE_BIND_RETURN_RETRY
);
/* Send response with wrong request type */
buf
[
0
]
|=
0x03
;
val
=
stun_bind_process
(
ctx
,
buf
,
len
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
EAGAIN
);
buf
[
0
]
^=
0x02
;
/* Send error response without ERROR-CODE */
buf
[
1
]
|=
0x10
;
val
=
stun_
bind_process
(
ctx
,
buf
,
len
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
EAGAIN
);
val
=
stun_
usage_bind_process
(
&
msg
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
STUN_USAGE_BIND_RETURN_RETRY
);
stun_bind_cancel
(
ctx
);
close
(
fd
);
close
(
servfd
);
}
/** Various responses test */
static
void
responses
(
void
)
{
stun_bind_t
*
ctx
;
struct
sockaddr_storage
addr
;
socklen_t
addrlen
=
sizeof
(
addr
);
ssize_t
val
;
size_t
len
;
int
servfd
,
fd
;
uint8_t
buf
[
STUN_MAX_MESSAGE_SIZE
];
uint8_t
req
[
STUN_MAX_MESSAGE_SIZE
];
size_t
req_len
;
StunAgent
agent
;
StunMessage
msg
;
StunMessage
req_msg
;
uint16_t
known_attributes
[]
=
{
STUN_ATTRIBUTE_MAPPED_ADDRESS
,
...
...
@@ -274,53 +283,35 @@ static void responses (void)
assert
(
val
==
0
);
/* Send error response */
val
=
stun_bind_start
(
&
ctx
,
fd
,
NULL
,
0
,
0
);
assert
(
val
==
0
);
req_len
=
stun_usage_bind_create
(
&
agent
,
&
req_msg
,
req
,
sizeof
(
req
)
);
assert
(
req_len
>
0
);
val
=
recv
(
servfd
,
buf
,
1000
,
MSG_DONTWAIT
);
val
=
send
(
fd
,
req
,
req_len
,
MSG_DONTWAIT
|
MSG_NOSIGNAL
);
assert
(
val
>=
0
);
assert
(
stun_agent_validate
(
&
agent
,
&
msg
,
buf
,
val
,
NULL
,
NULL
)
==
STUN_VALIDATION_SUCCESS
);
stun_agent_init_error
(
&
agent
,
&
msg
,
buf
,
sizeof
(
buf
),
&
msg
,
STUN_ERROR_SERVER_ERROR
);
len
=
stun_agent_finish_message
(
&
agent
,
&
msg
,
NULL
,
0
);
assert
(
len
>
0
);
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
0
);
val
=
stun_bind_process
(
ctx
,
buf
,
len
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
ECONNREFUSED
);
/* Send response with an unknown attribute */
val
=
stun_bind_start
(
&
ctx
,
fd
,
NULL
,
0
,
0
);
assert
(
val
==
0
);
val
=
recv
(
servfd
,
buf
,
1000
,
MSG_DONTWAIT
);
assert
(
val
>=
0
);
assert
(
stun_agent_validate
(
&
agent
,
&
msg
,
buf
,
val
,
NULL
,
NULL
)
==
STUN_VALIDATION_SUCCESS
);
stun_agent_init_response
(
&
agent
,
&
msg
,
buf
,
sizeof
(
buf
),
&
msg
);
val
=
stun_message_append_string
(
&
msg
,
0x6000
,
"This is an unknown attribute!"
);
assert
(
val
==
0
);
stun_agent_init_error
(
&
agent
,
&
msg
,
buf
,
sizeof
(
buf
),
&
msg
,
STUN_ERROR_SERVER_ERROR
);
len
=
stun_agent_finish_message
(
&
agent
,
&
msg
,
NULL
,
0
);
assert
(
len
>
0
);
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
0
);
val
=
stun_
bind_process
(
ctx
,
buf
,
len
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
EPROTO
);
val
=
stun_
usage_bind_process
(
&
msg
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
STUN_USAGE_BIND_RETURN_ERROR
);
/* Send response with a no mapped address at all */
val
=
stun_bind_start
(
&
ctx
,
fd
,
NULL
,
0
,
0
);
assert
(
val
==
0
);
req_len
=
stun_usage_bind_create
(
&
agent
,
&
req_msg
,
req
,
sizeof
(
req
));
assert
(
req_len
>
0
);
val
=
send
(
fd
,
req
,
req_len
,
MSG_DONTWAIT
|
MSG_NOSIGNAL
);
assert
(
val
>=
0
);
val
=
recv
(
servfd
,
buf
,
1000
,
MSG_DONTWAIT
);
assert
(
val
>=
0
);
...
...
@@ -332,16 +323,22 @@ static void responses (void)
len
=
stun_agent_finish_message
(
&
agent
,
&
msg
,
NULL
,
0
);
assert
(
len
>
0
);
assert
(
stun_agent_validate
(
&
agent
,
&
msg
,
buf
,
len
,
NULL
,
NULL
)
==
STUN_VALIDATION_SUCCESS
);
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
0
);
val
=
stun_
bind_process
(
ctx
,
buf
,
len
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
ENOENT
);
val
=
stun_
usage_bind_process
(
&
msg
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
STUN_USAGE_BIND_RETURN_ERROR
);
/* Send old-style response */
val
=
stun_bind_start
(
&
ctx
,
fd
,
NULL
,
0
,
0
);
assert
(
val
==
0
);
req_len
=
stun_usage_bind_create
(
&
agent
,
&
req_msg
,
req
,
sizeof
(
req
));
assert
(
req_len
>
0
);
val
=
send
(
fd
,
req
,
req_len
,
MSG_DONTWAIT
|
MSG_NOSIGNAL
);
assert
(
val
>=
0
);
val
=
recv
(
servfd
,
buf
,
1000
,
MSG_DONTWAIT
);
assert
(
val
>=
0
);
...
...
@@ -356,12 +353,15 @@ static void responses (void)
len
=
stun_agent_finish_message
(
&
agent
,
&
msg
,
NULL
,
0
);
assert
(
len
>
0
);
assert
(
stun_agent_validate
(
&
agent
,
&
msg
,
buf
,
len
,
NULL
,
NULL
)
==
STUN_VALIDATION_SUCCESS
);
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
0
);
val
=
stun_
bind_process
(
ctx
,
buf
,
len
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
0
);
val
=
stun_
usage_bind_process
(
&
msg
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
STUN_USAGE_BIND_RETURN_SUCCESS
);
/* End */
close
(
servfd
);
...
...
@@ -370,13 +370,29 @@ static void responses (void)
assert
(
val
==
0
);
}
static
void
keepalive
(
void
)
{
struct
sockaddr_storage
addr
;
socklen_t
addrlen
=
sizeof
(
addr
);
int
val
,
servfd
,
fd
;
uint8_t
buf
[
STUN_MAX_MESSAGE_SIZE
];
size_t
len
;
StunAgent
agent
;
StunMessage
msg
;
uint16_t
known_attributes
[]
=
{
STUN_ATTRIBUTE_MAPPED_ADDRESS
,
STUN_ATTRIBUTE_XOR_MAPPED_ADDRESS
,
STUN_ATTRIBUTE_XOR_INTERNAL_ADDRESS
,
STUN_ATTRIBUTE_PRIORITY
,
STUN_ATTRIBUTE_USERNAME
,
STUN_ATTRIBUTE_MESSAGE_INTEGRITY
,
STUN_ATTRIBUTE_ERROR_CODE
,
0
};
stun_agent_init
(
&
agent
,
known_attributes
,
STUN_COMPATIBILITY_3489BIS
,
0
);
/* Allocate a local UDP port for server */
servfd
=
listen_dgram
();
assert
(
servfd
!=
-
1
);
...
...
@@ -389,13 +405,19 @@ static void keepalive (void)
assert
(
fd
!=
-
1
);
/* Keep alive sending smoke test */
val
=
stun_bind_keepalive
(
fd
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
,
0
);
assert
(
val
==
0
);
len
=
stun_usage_bind_keepalive
(
&
agent
,
&
msg
,
buf
,
sizeof
(
buf
));
assert
(
len
==
28
);
val
=
sendto
(
fd
,
buf
,
len
,
MSG_DONTWAIT
|
MSG_NOSIGNAL
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
);
assert
(
val
>=
0
);
/* Wrong address family test */
addr
.
ss_family
=
addr
.
ss_family
==
AF_INET
?
AF_INET6
:
AF_INET
;
val
=
stun_bind_keepalive
(
fd
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
,
0
);
assert
(
val
!=
0
);
val
=
sendto
(
fd
,
buf
,
len
,
MSG_DONTWAIT
|
MSG_NOSIGNAL
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
);
assert
(
val
<
0
);
/* End */
close
(
servfd
);
...
...
@@ -407,7 +429,7 @@ static void keepalive (void)
static
void
test
(
void
(
*
func
)
(
void
),
const
char
*
name
)
{
//
alarm (10);
alarm
(
10
);
printf
(
"%s test... "
,
name
);
func
();
...
...
stun/tests/test-conncheck.c
View file @
9a18da4c
...
...
@@ -73,6 +73,7 @@ int main (void)
{
ufrag
,
strlen
(
ufrag
),
pass
,
strlen
(
pass
)},
{
username
,
strlen
(
username
),
pass
,
strlen
(
pass
)},
{
NULL
,
0
,
NULL
,
0
}};
StunValidationStatus
valid
;
stun_agent_init
(
&
agent
,
STUN_ALL_KNOWN_ATTRIBUTES
,
STUN_COMPATIBILITY_3489BIS
,
...
...
@@ -95,9 +96,9 @@ int main (void)
assert
(
rlen
>
0
);
len
=
sizeof
(
resp_buf
);
val
=
stun_
conncheck_reply
(
&
agent
,
&
req
,
req_buf
,
rlen
,
val
=
stun_
usage_ice_conncheck_create_reply
(
&
agent
,
&
req
,
&
resp
,
resp_buf
,
&
len
,
(
struct
sockaddr
*
)
&
ip4
,
sizeof
(
ip4
),
ufrag
,
strlen
(
ufrag
),
pass
,
strlen
(
pass
),
&
control
,
tie
,
0
);
sizeof
(
ip4
),
&
control
,
tie
);
assert
(
val
==
EINVAL
);
assert
(
len
==
0
);
...
...
@@ -109,9 +110,9 @@ int main (void)
assert
(
rlen
>
0
);
len
=
sizeof
(
resp_buf
);
val
=
stun_
conncheck_reply
(
&
agent
,
&
req
,
req_buf
,
rlen
,
val
=
stun_
usage_ice_conncheck_create_reply
(
&
agent
,
&
req
,
&
resp
,
resp_buf
,
&
len
,
(
struct
sockaddr
*
)
&
ip4
,
sizeof
(
ip4
),
ufrag
,
strlen
(
ufrag
),
pass
,
strlen
(
pass
),
&
control
,
tie
,
0
);
sizeof
(
ip4
),
&
control
,
tie
);
assert
(
val
==
EPROTO
);
assert
(
len
>
0
);
...
...
@@ -124,46 +125,32 @@ int main (void)
rlen
=
stun_agent_finish_message
(
&
agent
,
&
req
,
pass
,
strlen
(
pass
));
assert
(
rlen
>
0
);
len
=
sizeof
(
resp_buf
);
val
=
stun_conncheck_reply
(
&
agent
,
&
req
,
req_buf
,
rlen
,
&
resp
,
resp_buf
,
&
len
,
(
struct
sockaddr
*
)
&
ip4
,
sizeof
(
ip4
),
username
,
strlen
(
username
),
pass
,
strlen
(
pass
),
&
control
,
tie
,
0
);
assert
(
val
==
EPROTO
);
assert
(
len
>
0
);
valid
=
stun_agent_validate
(
&
agent
,
&
req
,
req_buf
,
rlen
,
stun_agent_default_validater
,
validater_data
);
assert
(
valid
==
STUN_VALIDATION_UNKNOWN_REQUEST_ATTRIBUTE
);
/* Unauthenticated message */
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
rlen
=
stun_agent_finish_message
(
&
agent
,
&
req
,
NULL
,
0
);
assert
(
rlen
>
0
);
len
=
sizeof
(
resp_buf
);
val
=
stun_conncheck_reply
(
&
agent
,
&
req
,
req_buf
,
rlen
,
&
resp
,
resp_buf
,
&
len
,
(
struct
sockaddr
*
)
&
ip4
,
sizeof
(
ip4
),
ufrag
,
strlen
(
ufrag
),
pass
,
strlen
(
pass
),
&
control
,
tie
,
0
);
assert
(
val
==
EPERM
);
assert
(
len
>
0
);
assert
(
stun_agent_validate
(
&
agent
,
&
resp
,
resp_buf
,
len
,
stun_agent_default_validater
,
validater_data
)
==
STUN_VALIDATION_SUCCESS
);
stun_message_find_error
(
&
resp
,
&
code
);
assert
(
code
==
STUN_ERROR_BAD_REQUEST
);
valid
=
stun_agent_validate
(
&
agent
,
&
req
,
req_buf
,
rlen
,
stun_agent_default_validater
,
validater_data
);
assert
(
valid
==
STUN_VALIDATION_UNAUTHORIZED_BAD_REQUEST
);
/* No username */
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
rlen
=
stun_agent_finish_message
(
&
agent
,
&
req
,
pass
,
strlen
(
pass
));
assert
(
rlen
>
0
);
len
=
sizeof
(
resp_buf
);
val
=
stun_conncheck_reply
(
&
agent
,
&
req
,
req_buf
,
rlen
,
&
resp
,
resp_buf
,
&
len
,
(
struct
sockaddr
*
)
&
ip4
,
sizeof
(
ip4
),
ufrag
,
strlen
(
ufrag
),
pass
,
strlen
(
pass
),
&
control
,
tie
,
0
);
assert
(
val
==
EPERM
);
assert
(
len
>
0
);
assert
(
stun_agent_validate
(
&
agent
,
&
resp
,
resp_buf
,
len
,
stun_agent_default_validater
,
validater_data
)
==
STUN_VALIDATION_SUCCESS
);
stun_message_find_error
(
&
resp
,
&
code
);
assert
(
code
==
STUN_ERROR_BAD_REQUEST
);
assert
(
stun_conncheck_priority
(
&
req
)
==
0
);
assert
(
stun_conncheck_use_candidate
(
&
req
)
==
false
);
valid
=
stun_agent_validate
(
&
agent
,
&
req
,
req_buf
,
rlen
,
stun_agent_default_validater
,
validater_data
);
assert
(
valid
==
STUN_VALIDATION_UNAUTHORIZED_BAD_REQUEST
);
assert
(
stun_usage_ice_conncheck_priority
(
&
req
)
==
0
);
assert
(
stun_usage_ice_conncheck_use_candidate
(
&
req
)
==
false
);
/* Good message */
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
...
...
@@ -177,55 +164,16 @@ int main (void)
assert
(
rlen
>
0
);
len
=
sizeof
(
resp_buf
);
val
=
stun_
conncheck_reply
(
&
agent
,
&
req
,
req_buf
,
rlen
,
val
=
stun_
usage_ice_conncheck_create_reply
(
&
agent
,
&
req
,
&
resp
,
resp_buf
,
&
len
,
(
struct
sockaddr
*
)
&
ip4
,
sizeof
(
ip4
),
ufrag
,
strlen
(
ufrag
),
pass
,
strlen
(
pass
),
&
control
,
tie
,
0
);
sizeof
(
ip4
),
&
control
,
tie
);
assert
(
val
==
0
);
assert
(
len
>
0
);
assert
(
stun_agent_validate
(
&
agent
,
&
resp
,
resp_buf
,
len
,
stun_agent_default_validater
,
validater_data
)
==
STUN_VALIDATION_SUCCESS
);
assert
(
stun_message_get_class
(
&
resp
)
==
STUN_RESPONSE
);
assert
(
stun_conncheck_priority
(
&
req
)
==
0x12345678
);
assert
(
stun_conncheck_use_candidate
(
&
req
)
==
true
);
/* Bad username */
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
val
=
stun_message_append_string
(
&
req
,
STUN_ATTRIBUTE_USERNAME
,
ufrag
);
assert
(
val
==
0
);
rlen
=
stun_agent_finish_message
(
&
agent
,
&
req
,
pass
,
strlen
(
pass
));
assert
(
rlen
>
0
);
len
=
sizeof
(
resp_buf
);
val
=
stun_conncheck_reply
(
&
agent
,
&
req
,
req_buf
,
rlen
,
&
resp
,
resp_buf
,
&
len
,
(
struct
sockaddr
*
)
&
ip4
,
sizeof
(
ip4
),
"bad"
,
strlen
(
"bad"
),
pass
,
strlen
(
pass
),
&
control
,
tie
,
0
);
assert
(
val
==
EPERM
);
assert
(
len
>
0
);
assert
(
stun_agent_validate
(
&
agent
,
&
resp
,
resp_buf
,
len
,
stun_agent_default_validater
,
validater_data
)
==
STUN_VALIDATION_SUCCESS
);
assert
(
stun_message_get_class
(
&
resp
)
==
STUN_ERROR
);
stun_message_find_error
(
&
resp
,
&
code
);
assert
(
code
==
STUN_ERROR_UNAUTHORIZED
);
/* Bad integrity (bad password) */
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
val
=
stun_message_append_string
(
&
req
,
STUN_ATTRIBUTE_USERNAME
,
ufrag
);
assert
(
val
==
0
);
rlen
=
stun_agent_finish_message
(
&
agent
,
&
req
,
pass
,
strlen
(
pass
));
assert
(
rlen
>
0
);
len
=
sizeof
(
resp_buf
);
val
=
stun_conncheck_reply
(
&
agent
,
&
req
,
req_buf
,
rlen
,
&
resp
,
resp_buf
,
&
len
,
(
struct
sockaddr
*
)
&
ip4
,
sizeof
(
ip4
),
ufrag
,
strlen
(
ufrag
),
"bad"
,
strlen
(
"bad"
),
&
control
,
tie
,
0
);
assert
(
val
==
EPERM
);
assert
(
len
>
0
);
assert
(
stun_agent_validate
(
&
agent
,
&
resp
,
resp_buf
,
len
,
stun_agent_default_validater
,
validater_data
)
==
STUN_VALIDATION_SUCCESS
);
assert
(
stun_message_get_class
(
&
resp
)
==
STUN_ERROR
);
stun_message_find_error
(
&
resp
,
&
code
);
assert
(
code
==
STUN_ERROR_UNAUTHORIZED
);
assert
(
stun_usage_ice_conncheck_priority
(
&
req
)
==
0x12345678
);
assert
(
stun_usage_ice_conncheck_use_candidate
(
&
req
)
==
true
);
/* Invalid socket address */
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
...
...
@@ -236,29 +184,14 @@ int main (void)
ip4
.
sin_family
=
AF_UNSPEC
;
len
=
sizeof
(
resp_buf
);
val
=
stun_
conncheck_reply
(
&
agent
,
&
req
,
req_buf
,
rlen
,
val
=
stun_
usage_ice_conncheck_create_reply
(
&
agent
,
&
req
,
&
resp
,
resp_buf
,
&
len
,
(
struct
sockaddr
*
)
&
ip4
,
sizeof
(
ip4
),
ufrag
,
strlen
(
ufrag
),
pass
,
strlen
(
pass
),
&
control
,
tie
,
0
);
sizeof
(
ip4
),
&
control
,
tie
);
assert
(
val
==
EAFNOSUPPORT
);
assert
(
len
==
0
);
ip4
.
sin_family
=
AF_INET
;
/* Bad CRC32 */
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
val
=
stun_message_append_string
(
&
req
,
STUN_ATTRIBUTE_USERNAME
,
ufrag
);
assert
(
val
==
0
);
rlen
=
stun_agent_finish_message
(
&
agent
,
&
req
,
pass
,
strlen
(
pass
));
assert
(
rlen
>
0
);
((
uint8_t
*
)
stun_message_find
(
&
req
,
STUN_ATTRIBUTE_FINGERPRINT
,
&
alen
))[
0
]
^=
1
;
len
=
sizeof
(
resp_buf
);
val
=
stun_conncheck_reply
(
&
agent
,
&
req
,
req_buf
,
rlen
,
&
resp
,
resp_buf
,
&
len
,
(
struct
sockaddr
*
)
&
ip4
,
sizeof
(
ip4
),
ufrag
,
strlen
(
ufrag
),
pass
,
strlen
(
pass
),
&
control
,
tie
,
0
);
assert
(
val
==
EINVAL
);
assert
(
len
==
0
);
/* Lost role conflict */
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
val
=
stun_message_append64
(
&
req
,
STUN_ATTRIBUTE_ICE_CONTROLLING
,
tie
+
1
);
...
...
@@ -271,9 +204,9 @@ int main (void)
len
=
sizeof
(
resp_buf
);
control
=
true
;
val
=
stun_
conncheck_reply
(
&
agent
,
&
req
,
req_buf
,
rlen
,
val
=
stun_
usage_ice_conncheck_create_reply
(
&
agent
,
&
req
,
&
resp
,
resp_buf
,
&
len
,
(
struct
sockaddr
*
)
&
ip4
,
sizeof
(
ip4
),
ufrag
,
strlen
(
ufrag
),
pass
,
strlen
(
pass
),
&
control
,
tie
,
0
);
sizeof
(
ip4
),
&
control
,
tie
);
assert
(
val
==
EACCES
);
assert
(
len
>
0
);
assert
(
control
==
false
);
...
...
@@ -292,9 +225,9 @@ int main (void)
len
=
sizeof
(
resp_buf
);
control
=
false
;
val
=
stun_
conncheck_reply
(
&
agent
,
&
req
,
req_buf
,
rlen
,
val
=
stun_
usage_ice_conncheck_create_reply
(
&
agent
,
&
req
,
&
resp
,
resp_buf
,
&
len
,
(
struct
sockaddr
*
)
&
ip4
,
sizeof
(
ip4
),
ufrag
,
strlen
(
ufrag
),
pass
,
strlen
(
pass
),
&
control
,
tie
,
0
);
sizeof
(
ip4
),
&
control
,
tie
);
assert
(
val
==
0
);
assert
(
len
>
0
);
assert
(
control
==
false
);
...
...
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