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
Show 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)
...
@@ -97,8 +97,8 @@ static void bad_family (void)
addr
.
sa_len
=
sizeof
(
addr
);
addr
.
sa_len
=
sizeof
(
addr
);
#endif
#endif
val
=
stun_
bind_run
(
-
1
,
&
addr
,
sizeof
(
addr
),
val
=
stun_
usage_bind_run
(
&
addr
,
sizeof
(
addr
),
&
dummy
,
&
(
socklen_t
){
sizeof
(
dummy
)
}
,
0
);
&
dummy
,
&
(
socklen_t
){
sizeof
(
dummy
)
});
assert
(
val
!=
0
);
assert
(
val
!=
0
);
}
}
...
@@ -115,9 +115,9 @@ static void small_srv_addr (void)
...
@@ -115,9 +115,9 @@ static void small_srv_addr (void)
addr
.
sa_len
=
sizeof
(
addr
);
addr
.
sa_len
=
sizeof
(
addr
);
#endif
#endif
val
=
stun_
bind_run
(
-
1
,
&
addr
,
1
,
val
=
stun_
usage_bind_run
(
&
addr
,
1
,
&
dummy
,
&
(
socklen_t
){
sizeof
(
dummy
)
}
,
0
);
&
dummy
,
&
(
socklen_t
){
sizeof
(
dummy
)
});
assert
(
val
==
EINVAL
);
assert
(
val
==
STUN_USAGE_BIND_RETURN_ERROR
);
}
}
...
@@ -128,14 +128,11 @@ static void big_srv_addr (void)
...
@@ -128,14 +128,11 @@ static void big_srv_addr (void)
struct
sockaddr
dummy
;
struct
sockaddr
dummy
;
int
fd
,
val
;
int
fd
,
val
;
fd
=
socket
(
AF_INET
,
SOCK_DGRAM
,
0
);
assert
(
fd
!=
-
1
);
memset
(
buf
,
0
,
sizeof
(
buf
));
memset
(
buf
,
0
,
sizeof
(
buf
));
val
=
stun_bind_run
(
fd
,
(
struct
sockaddr
*
)
buf
,
sizeof
(
buf
),
val
=
stun_usage_bind_run
((
struct
sockaddr
*
)
buf
,
sizeof
(
buf
),
&
dummy
,
&
(
socklen_t
){
sizeof
(
dummy
)
},
0
);
&
dummy
,
&
(
socklen_t
){
sizeof
(
dummy
)
});
assert
(
val
==
ENOBUFS
);
assert
(
val
==
STUN_USAGE_BIND_RETURN_ERROR
);
close
(
fd
);
}
}
...
@@ -154,22 +151,37 @@ static void timeout (void)
...
@@ -154,22 +151,37 @@ static void timeout (void)
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
srv
,
&
srvlen
);
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
srv
,
&
srvlen
);
assert
(
val
==
0
);
assert
(
val
==
0
);
val
=
stun_
bind_run
(
-
1
,
(
struct
sockaddr
*
)
&
srv
,
srvlen
,
val
=
stun_
usage_bind_run
(
(
struct
sockaddr
*
)
&
srv
,
srvlen
,
&
dummy
,
&
(
socklen_t
){
sizeof
(
dummy
)
}
,
0
);
&
dummy
,
&
(
socklen_t
){
sizeof
(
dummy
)
});
assert
(
val
==
ETIMED
OUT
);
assert
(
val
==
STUN_USAGE_BIND_RETURN_TIME
OUT
);
close
(
servfd
);
close
(
servfd
);
}
}
/** Malformed responses test */
/** Malformed responses test */
static
void
bad_responses
(
void
)
static
void
bad_responses
(
void
)
{
{
stun_bind_t
*
ctx
;
struct
sockaddr_storage
addr
;
struct
sockaddr_storage
addr
;
socklen_t
addrlen
=
sizeof
(
addr
);
socklen_t
addrlen
=
sizeof
(
addr
);
ssize_t
val
,
len
;
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 */
/* Allocate a local UDP port */
int
servfd
=
listen_dgram
(),
fd
;
int
servfd
=
listen_dgram
(),
fd
;
...
@@ -181,8 +193,12 @@ static void bad_responses (void)
...
@@ -181,8 +193,12 @@ static void bad_responses (void)
fd
=
socket
(
addr
.
ss_family
,
SOCK_DGRAM
,
0
);
fd
=
socket
(
addr
.
ss_family
,
SOCK_DGRAM
,
0
);
assert
(
fd
!=
-
1
);
assert
(
fd
!=
-
1
);
val
=
stun_bind_start
(
&
ctx
,
fd
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
,
0
);
req_len
=
stun_usage_bind_create
(
&
agent
,
&
req_msg
,
req
,
sizeof
(
req
));
assert
(
val
==
0
);
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 */
/* Send to/receive from our client instance only */
val
=
getsockname
(
fd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
val
=
getsockname
(
fd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
...
@@ -191,54 +207,47 @@ static void bad_responses (void)
...
@@ -191,54 +207,47 @@ static void bad_responses (void)
val
=
connect
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
);
val
=
connect
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
);
assert
(
val
==
0
);
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 */
/* Send request instead of response */
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
0
);
assert
(
val
==
0
);
len
=
recv
(
servfd
,
buf
,
1000
,
MSG_DONTWAIT
);
len
=
recv
(
servfd
,
buf
,
1000
,
MSG_DONTWAIT
);
assert
(
len
>=
20
);
assert
(
len
>=
20
);
val
=
stun_bind_process
(
ctx
,
buf
,
len
,
assert
(
stun_agent_validate
(
&
agent
,
&
msg
,
buf
,
len
,
NULL
,
NULL
)
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
==
STUN_VALIDATION_SUCCESS
);
assert
(
val
==
EAGAIN
);
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 */
/* Send response with wrong request type */
buf
[
0
]
|=
0x03
;
buf
[
0
]
|=
0x03
;
val
=
stun_bind_process
(
ctx
,
buf
,
len
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
EAGAIN
);
buf
[
0
]
^=
0x02
;
buf
[
0
]
^=
0x02
;
/* Send error response without ERROR-CODE */
/* Send error response without ERROR-CODE */
buf
[
1
]
|=
0x10
;
buf
[
1
]
|=
0x10
;
val
=
stun_
bind_process
(
ctx
,
buf
,
len
,
val
=
stun_
usage_bind_process
(
&
msg
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
EAGAIN
);
assert
(
val
==
STUN_USAGE_BIND_RETURN_RETRY
);
stun_bind_cancel
(
ctx
);
close
(
fd
);
close
(
fd
);
close
(
servfd
);
close
(
servfd
);
}
}
/** Various responses test */
/** Various responses test */
static
void
responses
(
void
)
static
void
responses
(
void
)
{
{
stun_bind_t
*
ctx
;
struct
sockaddr_storage
addr
;
struct
sockaddr_storage
addr
;
socklen_t
addrlen
=
sizeof
(
addr
);
socklen_t
addrlen
=
sizeof
(
addr
);
ssize_t
val
;
ssize_t
val
;
size_t
len
;
size_t
len
;
int
servfd
,
fd
;
int
servfd
,
fd
;
uint8_t
buf
[
STUN_MAX_MESSAGE_SIZE
];
uint8_t
buf
[
STUN_MAX_MESSAGE_SIZE
];
uint8_t
req
[
STUN_MAX_MESSAGE_SIZE
];
size_t
req_len
;
StunAgent
agent
;
StunAgent
agent
;
StunMessage
msg
;
StunMessage
msg
;
StunMessage
req_msg
;
uint16_t
known_attributes
[]
=
{
uint16_t
known_attributes
[]
=
{
STUN_ATTRIBUTE_MAPPED_ADDRESS
,
STUN_ATTRIBUTE_MAPPED_ADDRESS
,
...
@@ -274,53 +283,35 @@ static void responses (void)
...
@@ -274,53 +283,35 @@ static void responses (void)
assert
(
val
==
0
);
assert
(
val
==
0
);
/* Send error response */
/* Send error response */
val
=
stun_bind_start
(
&
ctx
,
fd
,
NULL
,
0
,
0
);
req_len
=
stun_usage_bind_create
(
&
agent
,
&
req_msg
,
req
,
sizeof
(
req
)
);
assert
(
val
==
0
);
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
(
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
);
val
=
recv
(
servfd
,
buf
,
1000
,
MSG_DONTWAIT
);
assert
(
val
>=
0
);
assert
(
val
>=
0
);
assert
(
stun_agent_validate
(
&
agent
,
&
msg
,
buf
,
val
,
NULL
,
NULL
)
assert
(
stun_agent_validate
(
&
agent
,
&
msg
,
buf
,
val
,
NULL
,
NULL
)
==
STUN_VALIDATION_SUCCESS
);
==
STUN_VALIDATION_SUCCESS
);
stun_agent_init_response
(
&
agent
,
&
msg
,
buf
,
sizeof
(
buf
),
&
msg
);
stun_agent_init_error
(
&
agent
,
&
msg
,
buf
,
sizeof
(
buf
),
&
msg
,
STUN_ERROR_SERVER_ERROR
);
val
=
stun_message_append_string
(
&
msg
,
0x6000
,
"This is an unknown attribute!"
);
assert
(
val
==
0
);
len
=
stun_agent_finish_message
(
&
agent
,
&
msg
,
NULL
,
0
);
len
=
stun_agent_finish_message
(
&
agent
,
&
msg
,
NULL
,
0
);
assert
(
len
>
0
);
assert
(
len
>
0
);
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
0
);
assert
(
val
==
0
);
val
=
stun_
bind_process
(
ctx
,
buf
,
len
,
val
=
stun_
usage_bind_process
(
&
msg
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
EPROTO
);
assert
(
val
==
STUN_USAGE_BIND_RETURN_ERROR
);
/* Send response with a no mapped address at all */
/* Send response with a no mapped address at all */
val
=
stun_bind_start
(
&
ctx
,
fd
,
NULL
,
0
,
0
);
req_len
=
stun_usage_bind_create
(
&
agent
,
&
req_msg
,
req
,
sizeof
(
req
));
assert
(
val
==
0
);
assert
(
req_len
>
0
);
val
=
send
(
fd
,
req
,
req_len
,
MSG_DONTWAIT
|
MSG_NOSIGNAL
);
assert
(
val
>=
0
);
val
=
recv
(
servfd
,
buf
,
1000
,
MSG_DONTWAIT
);
val
=
recv
(
servfd
,
buf
,
1000
,
MSG_DONTWAIT
);
assert
(
val
>=
0
);
assert
(
val
>=
0
);
...
@@ -332,16 +323,22 @@ static void responses (void)
...
@@ -332,16 +323,22 @@ static void responses (void)
len
=
stun_agent_finish_message
(
&
agent
,
&
msg
,
NULL
,
0
);
len
=
stun_agent_finish_message
(
&
agent
,
&
msg
,
NULL
,
0
);
assert
(
len
>
0
);
assert
(
len
>
0
);
assert
(
stun_agent_validate
(
&
agent
,
&
msg
,
buf
,
len
,
NULL
,
NULL
)
==
STUN_VALIDATION_SUCCESS
);
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
0
);
assert
(
val
==
0
);
val
=
stun_
bind_process
(
ctx
,
buf
,
len
,
val
=
stun_
usage_bind_process
(
&
msg
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
ENOENT
);
assert
(
val
==
STUN_USAGE_BIND_RETURN_ERROR
);
/* Send old-style response */
/* Send old-style response */
val
=
stun_bind_start
(
&
ctx
,
fd
,
NULL
,
0
,
0
);
req_len
=
stun_usage_bind_create
(
&
agent
,
&
req_msg
,
req
,
sizeof
(
req
));
assert
(
val
==
0
);
assert
(
req_len
>
0
);
val
=
send
(
fd
,
req
,
req_len
,
MSG_DONTWAIT
|
MSG_NOSIGNAL
);
assert
(
val
>=
0
);
val
=
recv
(
servfd
,
buf
,
1000
,
MSG_DONTWAIT
);
val
=
recv
(
servfd
,
buf
,
1000
,
MSG_DONTWAIT
);
assert
(
val
>=
0
);
assert
(
val
>=
0
);
...
@@ -356,12 +353,15 @@ static void responses (void)
...
@@ -356,12 +353,15 @@ static void responses (void)
len
=
stun_agent_finish_message
(
&
agent
,
&
msg
,
NULL
,
0
);
len
=
stun_agent_finish_message
(
&
agent
,
&
msg
,
NULL
,
0
);
assert
(
len
>
0
);
assert
(
len
>
0
);
assert
(
stun_agent_validate
(
&
agent
,
&
msg
,
buf
,
len
,
NULL
,
NULL
)
==
STUN_VALIDATION_SUCCESS
);
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
val
=
getsockname
(
servfd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
0
);
assert
(
val
==
0
);
val
=
stun_
bind_process
(
ctx
,
buf
,
len
,
val
=
stun_
usage_bind_process
(
&
msg
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
assert
(
val
==
0
);
assert
(
val
==
STUN_USAGE_BIND_RETURN_SUCCESS
);
/* End */
/* End */
close
(
servfd
);
close
(
servfd
);
...
@@ -370,13 +370,29 @@ static void responses (void)
...
@@ -370,13 +370,29 @@ static void responses (void)
assert
(
val
==
0
);
assert
(
val
==
0
);
}
}
static
void
keepalive
(
void
)
static
void
keepalive
(
void
)
{
{
struct
sockaddr_storage
addr
;
struct
sockaddr_storage
addr
;
socklen_t
addrlen
=
sizeof
(
addr
);
socklen_t
addrlen
=
sizeof
(
addr
);
int
val
,
servfd
,
fd
;
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 */
/* Allocate a local UDP port for server */
servfd
=
listen_dgram
();
servfd
=
listen_dgram
();
assert
(
servfd
!=
-
1
);
assert
(
servfd
!=
-
1
);
...
@@ -389,13 +405,19 @@ static void keepalive (void)
...
@@ -389,13 +405,19 @@ static void keepalive (void)
assert
(
fd
!=
-
1
);
assert
(
fd
!=
-
1
);
/* Keep alive sending smoke test */
/* Keep alive sending smoke test */
val
=
stun_bind_keepalive
(
fd
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
,
0
);
len
=
stun_usage_bind_keepalive
(
&
agent
,
&
msg
,
buf
,
sizeof
(
buf
));
assert
(
val
==
0
);
assert
(
len
==
28
);
val
=
sendto
(
fd
,
buf
,
len
,
MSG_DONTWAIT
|
MSG_NOSIGNAL
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
);
assert
(
val
>=
0
);
/* Wrong address family test */
/* Wrong address family test */
addr
.
ss_family
=
addr
.
ss_family
==
AF_INET
?
AF_INET6
:
AF_INET
;
addr
.
ss_family
=
addr
.
ss_family
==
AF_INET
?
AF_INET6
:
AF_INET
;
val
=
stun_bind_keepalive
(
fd
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
,
0
);
val
=
sendto
(
fd
,
buf
,
len
,
MSG_DONTWAIT
|
MSG_NOSIGNAL
,
assert
(
val
!=
0
);
(
struct
sockaddr
*
)
&
addr
,
addrlen
);
assert
(
val
<
0
);
/* End */
/* End */
close
(
servfd
);
close
(
servfd
);
...
@@ -407,7 +429,7 @@ static void keepalive (void)
...
@@ -407,7 +429,7 @@ static void keepalive (void)
static
void
test
(
void
(
*
func
)
(
void
),
const
char
*
name
)
static
void
test
(
void
(
*
func
)
(
void
),
const
char
*
name
)
{
{
//
alarm (10);
alarm
(
10
);
printf
(
"%s test... "
,
name
);
printf
(
"%s test... "
,
name
);
func
();
func
();
...
...
stun/tests/test-conncheck.c
View file @
9a18da4c
...
@@ -73,6 +73,7 @@ int main (void)
...
@@ -73,6 +73,7 @@ int main (void)
{
ufrag
,
strlen
(
ufrag
),
pass
,
strlen
(
pass
)},
{
ufrag
,
strlen
(
ufrag
),
pass
,
strlen
(
pass
)},
{
username
,
strlen
(
username
),
pass
,
strlen
(
pass
)},
{
username
,
strlen
(
username
),
pass
,
strlen
(
pass
)},
{
NULL
,
0
,
NULL
,
0
}};
{
NULL
,
0
,
NULL
,
0
}};
StunValidationStatus
valid
;
stun_agent_init
(
&
agent
,
STUN_ALL_KNOWN_ATTRIBUTES
,
stun_agent_init
(
&
agent
,
STUN_ALL_KNOWN_ATTRIBUTES
,
STUN_COMPATIBILITY_3489BIS
,
STUN_COMPATIBILITY_3489BIS
,
...
@@ -95,9 +96,9 @@ int main (void)
...
@@ -95,9 +96,9 @@ int main (void)
assert
(
rlen
>
0
);
assert
(
rlen
>
0
);
len
=
sizeof
(
resp_buf
);
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
,
&
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
(
val
==
EINVAL
);
assert
(
len
==
0
);
assert
(
len
==
0
);
...
@@ -109,9 +110,9 @@ int main (void)
...
@@ -109,9 +110,9 @@ int main (void)
assert
(
rlen
>
0
);
assert
(
rlen
>
0
);
len
=
sizeof
(
resp_buf
);
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
,
&
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
(
val
==
EPROTO
);
assert
(
len
>
0
);
assert
(
len
>
0
);
...
@@ -124,46 +125,32 @@ int main (void)
...
@@ -124,46 +125,32 @@ int main (void)
rlen
=
stun_agent_finish_message
(
&
agent
,
&
req
,
pass
,
strlen
(
pass
));
rlen
=
stun_agent_finish_message
(
&
agent
,
&
req
,
pass
,
strlen
(
pass
));
assert
(
rlen
>
0
);
assert
(
rlen
>
0
);
len
=
sizeof
(
resp_buf
);
valid
=
stun_agent_validate
(
&
agent
,
&
req
,
req_buf
,
rlen
,
val
=
stun_conncheck_reply
(
&
agent
,
&
req
,
req_buf
,
rlen
,
stun_agent_default_validater
,
validater_data
);
&
resp
,
resp_buf
,
&
len
,
(
struct
sockaddr
*
)
&
ip4
,
sizeof
(
ip4
),
username
,
strlen
(
username
),
pass
,
strlen
(
pass
),
&
control
,
tie
,
0
);
assert
(
valid
==
STUN_VALIDATION_UNKNOWN_REQUEST_ATTRIBUTE
);
assert
(
val
==
EPROTO
);
assert
(
len
>
0
);
/* Unauthenticated message */
/* Unauthenticated message */
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
rlen
=
stun_agent_finish_message
(
&
agent
,
&
req
,
NULL
,
0
);
rlen
=
stun_agent_finish_message
(
&
agent
,
&
req
,
NULL
,
0
);
assert
(
rlen
>
0
);
assert
(
rlen
>
0
);
len
=
sizeof
(
resp_buf
);
valid
=
stun_agent_validate
(
&
agent
,
&
req
,
req_buf
,
rlen
,
val
=
stun_conncheck_reply
(
&
agent
,
&
req
,
req_buf
,
rlen
,
stun_agent_default_validater
,
validater_data
);
&
resp
,
resp_buf
,
&
len
,
(
struct
sockaddr
*
)
&
ip4
,
sizeof
(
ip4
),
ufrag
,
strlen
(
ufrag
),
pass
,
strlen
(
pass
),
&
control
,
tie
,
0
);
assert
(
valid
==
STUN_VALIDATION_UNAUTHORIZED_BAD_REQUEST
);
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
);
/* No username */
/* No username */
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
rlen
=
stun_agent_finish_message
(
&
agent
,
&
req
,
pass
,
strlen
(
pass
));
rlen
=
stun_agent_finish_message
(
&
agent
,
&
req
,
pass
,
strlen
(
pass
));
assert
(
rlen
>
0
);
assert
(
rlen
>
0
);
len
=
sizeof
(
resp_buf
);
valid
=
stun_agent_validate
(
&
agent
,
&
req
,
req_buf
,
rlen
,
val
=
stun_conncheck_reply
(
&
agent
,
&
req
,
req_buf
,
rlen
,
stun_agent_default_validater
,
validater_data
);
&
resp
,
resp_buf
,
&
len
,
(
struct
sockaddr
*
)
&
ip4
,
sizeof
(
ip4
),
ufrag
,
strlen
(
ufrag
),
pass
,
strlen
(
pass
),
&
control
,
tie
,
0
);
assert
(
valid
==
STUN_VALIDATION_UNAUTHORIZED_BAD_REQUEST
);
assert
(
val
==
EPERM
);
assert
(
stun_usage_ice_conncheck_priority
(
&
req
)
==
0
);
assert
(
len
>
0
);
assert
(
stun_usage_ice_conncheck_use_candidate
(
&
req
)
==
false
);
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
);
/* Good message */
/* Good message */
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
...
@@ -177,55 +164,16 @@ int main (void)
...
@@ -177,55 +164,16 @@ int main (void)
assert
(
rlen
>
0
);
assert
(
rlen
>
0
);
len
=
sizeof
(
resp_buf
);
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
,
&
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
(
val
==
0
);
assert
(
len
>
0
);
assert
(
len
>
0
);
assert
(
stun_agent_validate
(
&
agent
,
&
resp
,
resp_buf
,
len
,
assert
(
stun_agent_validate
(
&
agent
,
&
resp
,
resp_buf
,
len
,
stun_agent_default_validater
,
validater_data
)
==
STUN_VALIDATION_SUCCESS
);
stun_agent_default_validater
,
validater_data
)
==
STUN_VALIDATION_SUCCESS
);
assert
(
stun_message_get_class
(
&
resp
)
==
STUN_RESPONSE
);
assert
(
stun_message_get_class
(
&
resp
)
==
STUN_RESPONSE
);
assert
(
stun_conncheck_priority
(
&
req
)
==
0x12345678
);
assert
(
stun_usage_ice_conncheck_priority
(
&
req
)
==
0x12345678
);
assert
(
stun_conncheck_use_candidate
(
&
req
)
==
true
);
assert
(
stun_usage_ice_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
);
/* Invalid socket address */
/* Invalid socket address */
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
...
@@ -236,29 +184,14 @@ int main (void)
...
@@ -236,29 +184,14 @@ int main (void)
ip4
.
sin_family
=
AF_UNSPEC
;
ip4
.
sin_family
=
AF_UNSPEC
;
len
=
sizeof
(
resp_buf
);
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
,
&
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
(
val
==
EAFNOSUPPORT
);
assert
(
len
==
0
);
assert
(
len
==
0
);
ip4
.
sin_family
=
AF_INET
;
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 */
/* Lost role conflict */
assert
(
stun_agent_init_request
(
&
agent
,
&
req
,
req_buf
,
sizeof
(
req_buf
),
STUN_BINDING
));
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
);
val
=
stun_message_append64
(
&
req
,
STUN_ATTRIBUTE_ICE_CONTROLLING
,
tie
+
1
);
...
@@ -271,9 +204,9 @@ int main (void)
...
@@ -271,9 +204,9 @@ int main (void)
len
=
sizeof
(
resp_buf
);
len
=
sizeof
(
resp_buf
);
control
=
true
;
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
,
&
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
(
val
==
EACCES
);
assert
(
len
>
0
);
assert
(
len
>
0
);
assert
(
control
==
false
);
assert
(
control
==
false
);
...
@@ -292,9 +225,9 @@ int main (void)
...
@@ -292,9 +225,9 @@ int main (void)
len
=
sizeof
(
resp_buf
);
len
=
sizeof
(
resp_buf
);
control
=
false
;
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
,
&
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
(
val
==
0
);
assert
(
len
>
0
);
assert
(
len
>
0
);
assert
(
control
==
false
);
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