blob: e739ec4458a0fdc8fd6fa40a499947cb8608aa82 [file] [log] [blame]
/** @file
A brief file description
@section license License
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#ifndef LOG_COLLATION_HOST_SM_H
#define LOG_COLLATION_HOST_SM_H
//-------------------------------------------------------------------------
// includes
//-------------------------------------------------------------------------
#include "P_EventSystem.h"
#include "LogCollationBase.h"
//-------------------------------------------------------------------------
// pre-declarations
//-------------------------------------------------------------------------
struct LogBufferHeader;
//-------------------------------------------------------------------------
// LogCollationHostSM
//-------------------------------------------------------------------------
class LogCollationHostSM:public LogCollationBase, public Continuation
{
public:
LogCollationHostSM(NetVConnection * client_vc);
// handlers
int host_handler(int event, void *data);
int read_handler(int event, void *data);
private:
enum HostState
{
LOG_COLL_HOST_NULL,
LOG_COLL_HOST_AUTH,
LOG_COLL_HOST_DONE,
LOG_COLL_HOST_INIT,
LOG_COLL_HOST_RECV
};
enum ReadState
{
LOG_COLL_READ_NULL,
LOG_COLL_READ_BODY,
LOG_COLL_READ_HDR
};
private:
// host states
int host_init(int event, void *data);
int host_auth(int event, void *data);
int host_recv(int event, void *data);
int host_done(int event, void *data);
HostState m_host_state;
// read states
int read_hdr(int event, VIO * vio);
int read_body(int event, VIO * vio);
int read_done(int event, void *data);
int read_start();
ReadState m_read_state;
// helper for read states
void read_partial(VIO * vio);
// iocore stuff
NetVConnection *m_client_vc;
VIO *m_client_vio;
MIOBuffer *m_client_buffer;
IOBufferReader *m_client_reader;
Event *m_pending_event;
// read_state stuff
NetMsgHeader m_net_msg_header;
char *m_read_buffer;
int64_t m_read_bytes_wanted;
int64_t m_read_bytes_received;
// client info
int m_client_ip;
int m_client_port;
// debugging
static int ID;
int m_id;
};
typedef int (LogCollationHostSM::*LogCollationHostSMHandler) (int, void *);
#endif // LOG_COLLATION_HOST_SM_H