mirror of git://git.sysmocom.de/ofono
unit: Fix fragmenting messages < frag_size
This commit is contained in:
parent
bae2843eac
commit
1bf22999e5
|
@ -134,7 +134,7 @@ static void do_debug(const char *str, void *user_data)
|
||||||
|
|
||||||
static struct mbim_message *build_message(const struct message_data *msg_data)
|
static struct mbim_message *build_message(const struct message_data *msg_data)
|
||||||
{
|
{
|
||||||
static const int frag_size = 64;
|
static const unsigned int frag_size = 64;
|
||||||
struct mbim_message *msg;
|
struct mbim_message *msg;
|
||||||
struct iovec *iov;
|
struct iovec *iov;
|
||||||
size_t n_iov;
|
size_t n_iov;
|
||||||
|
@ -143,9 +143,14 @@ static struct mbim_message *build_message(const struct message_data *msg_data)
|
||||||
n_iov = align_len(msg_data->binary_len, frag_size) / frag_size;
|
n_iov = align_len(msg_data->binary_len, frag_size) / frag_size;
|
||||||
iov = l_new(struct iovec, n_iov);
|
iov = l_new(struct iovec, n_iov);
|
||||||
|
|
||||||
iov[0].iov_len = frag_size - 20;
|
iov[0].iov_len = msg_data->binary_len < frag_size ?
|
||||||
|
msg_data->binary_len - 20 :
|
||||||
|
frag_size - 20;
|
||||||
iov[0].iov_base = l_memdup(msg_data->binary + 20, iov[0].iov_len);
|
iov[0].iov_base = l_memdup(msg_data->binary + 20, iov[0].iov_len);
|
||||||
|
|
||||||
|
if (n_iov == 1)
|
||||||
|
goto done;
|
||||||
|
|
||||||
for (i = 1; i < n_iov - 1; i++) {
|
for (i = 1; i < n_iov - 1; i++) {
|
||||||
iov[i].iov_base = l_memdup(msg_data->binary + i * frag_size,
|
iov[i].iov_base = l_memdup(msg_data->binary + i * frag_size,
|
||||||
frag_size);
|
frag_size);
|
||||||
|
@ -156,6 +161,7 @@ static struct mbim_message *build_message(const struct message_data *msg_data)
|
||||||
iov[i].iov_base = l_memdup(msg_data->binary + i * frag_size,
|
iov[i].iov_base = l_memdup(msg_data->binary + i * frag_size,
|
||||||
iov[i].iov_len);
|
iov[i].iov_len);
|
||||||
|
|
||||||
|
done:
|
||||||
msg = _mbim_message_build(msg_data->binary, iov, n_iov);
|
msg = _mbim_message_build(msg_data->binary, iov, n_iov);
|
||||||
assert(msg);
|
assert(msg);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue