| summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/meta_net/meta_net_handle_reply.c')
| -rw-r--r-- | src/meta_net/meta_net_handle_reply.c | 232 |
1 files changed, 189 insertions, 43 deletions
diff --git a/src/meta_net/meta_net_handle_reply.c b/src/meta_net/meta_net_handle_reply.c index b823078..558daed 100644 --- a/src/meta_net/meta_net_handle_reply.c +++ b/src/meta_net/meta_net_handle_reply.c @@ -5,70 +5,216 @@ #include "meta_net.h" -void JH_meta_net_handle_reply +static void handle_generated_reply ( struct JH_meta_net socket [const restrict static 1], struct JH_irc irc [const restrict static 1], const struct JH_parameters params [const restrict static 1] ) { - if (socket->in.index == 0) - { - /* No reply to handle. */ - return; - } - - socket->in.data[socket->in.index] = '\0'; - - if (JH_IS_PREFIX("!CPV ", socket->in.data)) - { - } - else if (JH_IS_PREFIX("!CPS ", socket->in.data)) + if + ( + JH_IS_PREFIX + ( + JH_META_NET_ACTION_STRING " ", + ( + socket->in.data + + + ( + JH_META_NET_GR_STRING_LENGTH + + 1 /* ' ' */ + ) + ) + ) + ) { + JH_irc_send_action + ( + irc, + ( + socket->in.data + + + ( + JH_META_NET_GR_STRING_LENGTH + + 1 /* ' ' */ + + JH_META_NET_ACTION_STRING_LENGTH + + 1 /* ' ' */ + ) + ) + ); } - else if (JH_IS_PREFIX("!GR ", socket->in.data)) + else if + ( + socket->in.index + > + ( + JH_META_NET_GR_STRING_LENGTH + + 1 /* ' ' */ + ) + ) { - /* TODO: /me vs message should be handled prior to this. */ - JH_irc_send_message(irc, (socket->in.data + 4)); - - JH_DEBUG + JH_irc_send_message ( - stderr, - /* TODO: Parameter dependent behavior. */ - JH_DEBUG_DISPLAY_IRC_MSG_EXCHANGES, - "<%s> %s", - JH_parameters_get_irc_nick(params), - (socket->in.data + 4) + irc, + ( + socket->in.data + + + ( + JH_META_NET_GR_STRING_LENGTH + + 1 /* ' ' */ + ) + ) ); } - else if (JH_IS_PREFIX("!AI ", socket->in.data)) +} + +static void move_to_next_reply +( + struct JH_meta_net socket [const restrict static 1] +) +{ + if (socket->in.index < socket->in.length) { - /* TODO: Parameter dependent behavior. */ - JH_DEBUG + memmove ( - stderr, - 1, - "Received: %s.", - socket->in.data + (void *) socket->in.data, + (const void *) (socket->in.data + socket->in.index + 1), + ((socket->in.length - 1) - socket->in.index) * sizeof(char) ); } - else if (JH_IS_PREFIX("!P ", socket->in.data)) + + socket->in.length = (socket->in.length - 1) - socket->in.index; + + for + ( + socket->in.index = 0; + (socket->in.index < socket->in.length); + socket->in.index += 1 + ) { - socket->has_request_in_progress = 0; + if (socket->in.data[socket->in.index] == '\n') + { + return; + } } - else if (JH_IS_PREFIX("!N ", socket->in.data)) - { - JH_S_WARNING(stderr, "Received Negative reply."); - socket->has_request_in_progress = 0; - } - else + socket->in.index = 0; +} + +static void handle_additional_info +( + struct JH_meta_net socket [const restrict static 1], + const struct JH_parameters params [const restrict static 1] +) +{ + if (JH_parameters_get_print_additional_info(params)) { - JH_WARNING + printf ( - stderr, - "Unsupported reply received: %s.", - socket->in.data + "[JH][AI] %s\n", + ( + socket->in.data + + + ( + JH_META_NET_AI_STRING_LENGTH + + 1 /* ' ' */ + ) + ) ); } } + +void JH_meta_net_handle_reply +( + struct JH_meta_net socket [const restrict static 1], + struct JH_irc irc [const restrict static 1], + const struct JH_parameters params [const restrict static 1] +) +{ + while + ( + (socket->in.length != 0) + && (socket->in.data[socket->in.index] == '\n') + ) + { + socket->in.data[socket->in.index] = '\0'; + + if + ( + JH_IS_PREFIX + ( + JH_META_NET_CPV_STRING " ", + socket->in.data + ) + ) + { + } + else if + ( + JH_IS_PREFIX + ( + JH_META_NET_CPS_STRING " ", + socket->in.data + ) + ) + { + } + else if + ( + JH_IS_PREFIX + ( + JH_META_NET_GR_STRING " ", + socket->in.data + ) + ) + { + handle_generated_reply(socket, irc, params); + } + else if + ( + JH_IS_PREFIX + ( + JH_META_NET_AI_STRING " ", + socket->in.data + ) + ) + { + handle_additional_info(socket, params); + } + else if + ( + JH_IS_PREFIX + ( + JH_META_NET_P_STRING " ", + socket->in.data + ) + ) + { + socket->has_request_in_progress = 0; + } + else if + ( + JH_IS_PREFIX + ( + JH_META_NET_N_STRING " ", + socket->in.data + ) + ) + { + JH_S_WARNING(stderr, "[JH] Received Negative reply."); + + socket->has_request_in_progress = 0; + } + else + { + JH_WARNING + ( + stderr, + "[JH] Unsupported reply received: %s.", + socket->in.data + ); + } + + move_to_next_reply(socket); + } +} |


