0
0
mirror of https://github.com/OpenVPN/openvpn.git synced 2024-09-20 03:52:28 +02:00

Extract process_incoming_push_reply from process_incoming_push_msg

This is a small refactoring to make both function more readable. It also
eliminates the ret variable in process_incoming_push_msg that now serves
no purpose anymore.

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Antonio Quartulli <antonio@openvpn.net>
Message-Id: <20200709101603.11941-3-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg20254.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
This commit is contained in:
Arne Schwabe 2020-07-09 12:15:58 +02:00 committed by Gert Doering
parent 5608041c7b
commit 5e78bf66fa

View File

@ -855,6 +855,63 @@ push_update_digest(md_ctx_t *ctx, struct buffer *buf, const struct options *opt)
} }
} }
static int
process_incoming_push_reply(struct context *c,
unsigned int permission_mask,
unsigned int *option_types_found,
struct buffer *buf)
{
int ret = PUSH_MSG_ERROR;
const uint8_t ch = buf_read_u8(buf);
if (ch == ',')
{
struct buffer buf_orig = (*buf);
if (!c->c2.pulled_options_digest_init_done)
{
c->c2.pulled_options_state = md_ctx_new();
md_ctx_init(c->c2.pulled_options_state, md_kt_get("SHA256"));
c->c2.pulled_options_digest_init_done = true;
}
if (!c->c2.did_pre_pull_restore)
{
pre_pull_restore(&c->options, &c->c2.gc);
c->c2.did_pre_pull_restore = true;
}
if (apply_push_options(&c->options,
buf,
permission_mask,
option_types_found,
c->c2.es))
{
push_update_digest(c->c2.pulled_options_state, &buf_orig,
&c->options);
switch (c->options.push_continuation)
{
case 0:
case 1:
md_ctx_final(c->c2.pulled_options_state,
c->c2.pulled_options_digest.digest);
md_ctx_cleanup(c->c2.pulled_options_state);
md_ctx_free(c->c2.pulled_options_state);
c->c2.pulled_options_state = NULL;
c->c2.pulled_options_digest_init_done = false;
ret = PUSH_MSG_REPLY;
break;
case 2:
ret = PUSH_MSG_CONTINUATION;
break;
}
}
}
else if (ch == '\0')
{
ret = PUSH_MSG_REPLY;
}
/* show_settings (&c->options); */
return ret;
}
int int
process_incoming_push_msg(struct context *c, process_incoming_push_msg(struct context *c,
const struct buffer *buffer, const struct buffer *buffer,
@ -862,64 +919,22 @@ process_incoming_push_msg(struct context *c,
unsigned int permission_mask, unsigned int permission_mask,
unsigned int *option_types_found) unsigned int *option_types_found)
{ {
int ret = PUSH_MSG_ERROR;
struct buffer buf = *buffer; struct buffer buf = *buffer;
if (buf_string_compare_advance(&buf, "PUSH_REQUEST")) if (buf_string_compare_advance(&buf, "PUSH_REQUEST"))
{ {
ret = process_incoming_push_request(c); return process_incoming_push_request(c);
} }
else if (honor_received_options else if (honor_received_options
&& buf_string_compare_advance(&buf, "PUSH_REPLY")) && buf_string_compare_advance(&buf, "PUSH_REPLY"))
{ {
const uint8_t ch = buf_read_u8(&buf); return process_incoming_push_reply(c, permission_mask,
if (ch == ',') option_types_found, &buf);
{ }
struct buffer buf_orig = buf; else
if (!c->c2.pulled_options_digest_init_done) {
{ return PUSH_MSG_ERROR;
c->c2.pulled_options_state = md_ctx_new();
md_ctx_init(c->c2.pulled_options_state, md_kt_get("SHA256"));
c->c2.pulled_options_digest_init_done = true;
}
if (!c->c2.did_pre_pull_restore)
{
pre_pull_restore(&c->options, &c->c2.gc);
c->c2.did_pre_pull_restore = true;
}
if (apply_push_options(&c->options,
&buf,
permission_mask,
option_types_found,
c->c2.es))
{
push_update_digest(c->c2.pulled_options_state, &buf_orig,
&c->options);
switch (c->options.push_continuation)
{
case 0:
case 1:
md_ctx_final(c->c2.pulled_options_state, c->c2.pulled_options_digest.digest);
md_ctx_cleanup(c->c2.pulled_options_state);
md_ctx_free(c->c2.pulled_options_state);
c->c2.pulled_options_state = NULL;
c->c2.pulled_options_digest_init_done = false;
ret = PUSH_MSG_REPLY;
break;
case 2:
ret = PUSH_MSG_CONTINUATION;
break;
}
}
}
else if (ch == '\0')
{
ret = PUSH_MSG_REPLY;
}
/* show_settings (&c->options); */
} }
return ret;
} }