mirror of
https://github.com/openappsec/attachment.git
synced 2025-06-28 16:41:03 +03:00
270 lines
6.5 KiB
C
270 lines
6.5 KiB
C
#include "nano_attachment_sender_thread.h"
|
|
|
|
#include "nano_initializer.h"
|
|
#include "nano_attachment_sender.h"
|
|
#include "nano_attachment_common.h"
|
|
#include "nano_attachment_io.h"
|
|
|
|
void
|
|
init_thread_ctx(HttpEventThreadCtx *ctx, NanoAttachment *attachment, AttachmentData *data)
|
|
{
|
|
ctx->attachment = attachment;
|
|
ctx->data = data;
|
|
ctx->session_data_p = (data == NULL) ? NULL : data->session_data;
|
|
ctx->res = NANO_OK;
|
|
ctx->web_response_data = NULL;
|
|
ctx->modifications = NULL;
|
|
}
|
|
|
|
void *
|
|
RegistrationCommSocketThread(void *_ctx)
|
|
{
|
|
HttpEventThreadCtx *ctx = (HttpEventThreadCtx *)_ctx;
|
|
NanoAttachment *attachment = ctx->attachment;
|
|
|
|
ctx->res = connect_to_comm_socket(attachment);
|
|
|
|
return NULL;
|
|
}
|
|
|
|
void *
|
|
RegistrationSocketThread(void *_ctx)
|
|
{
|
|
HttpEventThreadCtx *ctx = (HttpEventThreadCtx *)_ctx;
|
|
NanoAttachment *attachment = ctx->attachment;
|
|
|
|
ctx->res = connect_to_registration_socket(attachment);
|
|
return 0;
|
|
}
|
|
|
|
void *
|
|
SendRequestFilterThread(void *_ctx)
|
|
{
|
|
HttpEventThreadCtx *ctx = (HttpEventThreadCtx *)_ctx;
|
|
|
|
HttpRequestFilterData *start_data = (HttpRequestFilterData*)ctx->data->data;
|
|
HttpMetaData *metadata = start_data->meta_data;
|
|
HttpHeaders *headers = start_data->req_headers;
|
|
bool contains_body = start_data->contains_body;
|
|
NanoAttachment *attachment = ctx->attachment;
|
|
HttpSessionData *session_data_p = ctx->session_data_p;
|
|
bool is_verdict_requested = false;
|
|
|
|
nano_metadata_sender(
|
|
attachment,
|
|
metadata,
|
|
ctx,
|
|
session_data_p->session_id,
|
|
&session_data_p->remaining_messages_to_reply,
|
|
is_verdict_requested
|
|
);
|
|
|
|
nano_header_sender(
|
|
attachment,
|
|
headers,
|
|
ctx,
|
|
REQUEST_HEADER,
|
|
session_data_p->session_id,
|
|
&session_data_p->remaining_messages_to_reply,
|
|
is_verdict_requested
|
|
);
|
|
|
|
if (!contains_body) {
|
|
nano_end_transaction_sender(
|
|
attachment,
|
|
REQUEST_END,
|
|
ctx,
|
|
session_data_p->session_id,
|
|
&session_data_p->remaining_messages_to_reply
|
|
);
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
void *
|
|
SendMetadataThread(void *_ctx)
|
|
{
|
|
HttpEventThreadCtx *ctx = (HttpEventThreadCtx *)_ctx;
|
|
HttpMetaData *metadata = (HttpMetaData*)ctx->data->data;
|
|
NanoAttachment *attachment = ctx->attachment;
|
|
HttpSessionData *session_data_p = ctx->session_data_p;
|
|
bool is_verdict_requested = false;
|
|
|
|
nano_metadata_sender(
|
|
attachment,
|
|
metadata,
|
|
ctx,
|
|
session_data_p->session_id,
|
|
&session_data_p->remaining_messages_to_reply,
|
|
is_verdict_requested
|
|
);
|
|
|
|
return NULL;
|
|
}
|
|
|
|
void *
|
|
SendRequestHeadersThread(void *_ctx)
|
|
{
|
|
HttpEventThreadCtx *ctx = (HttpEventThreadCtx *)_ctx;
|
|
HttpHeaders *headers = (HttpHeaders*)ctx->data->data;
|
|
NanoAttachment *attachment = ctx->attachment;
|
|
HttpSessionData *session_data_p = ctx->session_data_p;
|
|
bool is_verdict_requested = false;
|
|
|
|
nano_header_sender(
|
|
attachment,
|
|
headers,
|
|
ctx,
|
|
REQUEST_HEADER,
|
|
session_data_p->session_id,
|
|
&session_data_p->remaining_messages_to_reply,
|
|
is_verdict_requested
|
|
);
|
|
|
|
return NULL;
|
|
}
|
|
|
|
void *
|
|
SendResponseHeadersThread(void *_ctx)
|
|
{
|
|
HttpEventThreadCtx *ctx = (HttpEventThreadCtx *)_ctx;
|
|
ResHttpHeaders *headers = (ResHttpHeaders*)ctx->data->data;
|
|
NanoAttachment *attachment = ctx->attachment;
|
|
HttpSessionData *session_data_p = ctx->session_data_p;
|
|
HttpHeaders *http_headers = headers->headers;
|
|
bool is_verdict_requested = false;
|
|
|
|
nano_send_response_code(
|
|
attachment,
|
|
headers->response_code,
|
|
ctx,
|
|
session_data_p->session_id,
|
|
&session_data_p->remaining_messages_to_reply
|
|
);
|
|
|
|
nano_send_response_content_length(
|
|
attachment,
|
|
headers->content_length,
|
|
ctx,
|
|
session_data_p->session_id,
|
|
&session_data_p->remaining_messages_to_reply
|
|
);
|
|
|
|
nano_header_sender(
|
|
attachment,
|
|
http_headers,
|
|
ctx,
|
|
RESPONSE_HEADER,
|
|
session_data_p->session_id,
|
|
&session_data_p->remaining_messages_to_reply,
|
|
is_verdict_requested
|
|
);
|
|
|
|
return NULL;
|
|
}
|
|
|
|
void *
|
|
SendRequestBodyThread(void *_ctx)
|
|
{
|
|
HttpEventThreadCtx *ctx = (HttpEventThreadCtx *)_ctx;
|
|
HttpBody *bodies = (HttpBody*)ctx->data->data;
|
|
NanoAttachment *attachment = ctx->attachment;
|
|
HttpSessionData *session_data_p = ctx->session_data_p;
|
|
|
|
nano_body_sender(
|
|
attachment,
|
|
bodies,
|
|
ctx,
|
|
REQUEST_BODY,
|
|
session_data_p->session_id,
|
|
&session_data_p->remaining_messages_to_reply
|
|
);
|
|
|
|
return NULL;
|
|
}
|
|
|
|
void *
|
|
SendResponseBodyThread(void *_ctx)
|
|
{
|
|
HttpEventThreadCtx *ctx = (HttpEventThreadCtx *)_ctx;
|
|
HttpBody *bodies = (HttpBody*)ctx->data->data;
|
|
NanoAttachment *attachment = ctx->attachment;
|
|
HttpSessionData *session_data_p = ctx->session_data_p;
|
|
|
|
nano_body_sender(
|
|
attachment,
|
|
bodies,
|
|
ctx,
|
|
RESPONSE_BODY,
|
|
session_data_p->session_id,
|
|
&session_data_p->remaining_messages_to_reply
|
|
);
|
|
|
|
return NULL;
|
|
}
|
|
|
|
void *
|
|
SendRequestEndThread(void *_ctx)
|
|
{
|
|
HttpEventThreadCtx *ctx = (HttpEventThreadCtx *)_ctx;
|
|
NanoAttachment *attachment = ctx->attachment;
|
|
HttpSessionData *session_data_p = ctx->session_data_p;
|
|
|
|
nano_end_transaction_sender(
|
|
attachment,
|
|
REQUEST_END,
|
|
ctx,
|
|
session_data_p->session_id,
|
|
&session_data_p->remaining_messages_to_reply
|
|
);
|
|
|
|
return NULL;
|
|
}
|
|
|
|
void *
|
|
SendResponseEndThread(void *_ctx)
|
|
{
|
|
HttpEventThreadCtx *ctx = (HttpEventThreadCtx *)_ctx;
|
|
NanoAttachment *attachment = ctx->attachment;
|
|
HttpSessionData *session_data_p = ctx->session_data_p;
|
|
|
|
nano_end_transaction_sender(
|
|
attachment,
|
|
RESPONSE_END,
|
|
ctx,
|
|
session_data_p->session_id,
|
|
&session_data_p->remaining_messages_to_reply
|
|
);
|
|
|
|
return NULL;
|
|
}
|
|
|
|
void *
|
|
SendDelayedVerdictRequestThread(void *_ctx)
|
|
{
|
|
HttpEventThreadCtx *ctx = (HttpEventThreadCtx *)_ctx;
|
|
NanoAttachment *attachment = ctx->attachment;
|
|
HttpSessionData *session_data_p = ctx->session_data_p;
|
|
|
|
nano_request_delayed_verdict(
|
|
attachment,
|
|
ctx,
|
|
session_data_p->session_id,
|
|
&session_data_p->remaining_messages_to_reply
|
|
);
|
|
|
|
return NULL;
|
|
}
|
|
|
|
void *
|
|
SendMetricToServiceThread(void *_data)
|
|
{
|
|
HttpEventThreadCtx *ctx = (HttpEventThreadCtx *)_data;
|
|
NanoAttachment *attachment = ctx->attachment;
|
|
|
|
nano_send_metric_data_sender(attachment);
|
|
|
|
return NULL;
|
|
}
|