158 lines
5.1 KiB
C++
158 lines
5.1 KiB
C++
/******************************************************************************
|
|
* Copyright (c) 2005, 2014 Ericsson AB
|
|
* All rights reserved. This program and the accompanying materials
|
|
* are made available under the terms of the Eclipse Public License v1.0
|
|
* which accompanies this distribution, and is available at
|
|
* http://www.eclipse.org/legal/epl-v10.html
|
|
*
|
|
* Contributors:
|
|
* Peter Dimitrov- initial implementation and initial documentation
|
|
* Adam Delic
|
|
* Eduard Czimbalmos
|
|
* Endre Kulcsar
|
|
* Gabor Bettesch
|
|
* Gabor Szalai
|
|
* Tamas Buti
|
|
* Zoltan Medve
|
|
******************************************************************************/
|
|
//
|
|
// File: SCTPasp_PT.hh
|
|
// Description: SCTPasp test port header
|
|
// Rev: R11A
|
|
// Prodnr: CNL 113 469
|
|
//
|
|
|
|
|
|
#ifndef SCTPasp__PT_HH
|
|
#define SCTPasp__PT_HH
|
|
|
|
#include <TTCN3.hh>
|
|
#include "SCTPasp_Types.hh"
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#include <netinet/sctp.h>
|
|
|
|
namespace SCTPasp__Types {
|
|
class ASP__SCTP;
|
|
class ASP__SCTP__Connect;
|
|
class ASP__SCTP__ConnectFrom;
|
|
class ASP__SCTP__Listen;
|
|
|
|
class SCTP__INIT;
|
|
class SCTP__EVENTS;
|
|
class SO__LINGER;
|
|
class SCTP__RTOINFO;
|
|
class SAC__STATE;
|
|
class SPC__STATE;
|
|
|
|
class ASP__SCTP__SetSocketOptions;
|
|
class ASP__SCTP__Close;
|
|
class ASP__SCTP__ASSOC__CHANGE;
|
|
class ASP__SCTP__PEER__ADDR__CHANGE;
|
|
class ASP__SCTP__SEND__FAILED;
|
|
class ASP__SCTP__REMOTE__ERROR;
|
|
class ASP__SCTP__SHUTDOWN__EVENT;
|
|
class ASP__SCTP__PARTIAL__DELIVERY__EVENT;
|
|
class ASP__SCTP__ADAPTION__INDICATION;
|
|
class ASP__SCTP__Connected;
|
|
class ASP__SCTP__SENDMSG__ERROR;
|
|
class ASP__SCTP__RESULT;
|
|
}
|
|
|
|
namespace SCTPasp__PortType {
|
|
class SCTPasp__PT_PROVIDER : public PORT {
|
|
public:
|
|
SCTPasp__PT_PROVIDER(const char *par_port_name = NULL);
|
|
~SCTPasp__PT_PROVIDER();
|
|
|
|
void set_parameter(const char *parameter_name,
|
|
const char *parameter_value);
|
|
|
|
void Event_Handler(const fd_set *read_fds,
|
|
const fd_set *write_fds, const fd_set *error_fds,
|
|
double time_since_last_call);
|
|
|
|
protected:
|
|
void user_map(const char *system_port);
|
|
void user_unmap(const char *system_port);
|
|
|
|
void user_start();
|
|
void user_stop();
|
|
|
|
void outgoing_send(const SCTPasp__Types::ASP__SCTP__Connect& send_par);
|
|
void outgoing_send(const SCTPasp__Types::ASP__SCTP__ConnectFrom& send_par);
|
|
void outgoing_send(const SCTPasp__Types::ASP__SCTP__Listen& send_par);
|
|
void outgoing_send(const SCTPasp__Types::ASP__SCTP__SetSocketOptions& send_par);
|
|
void outgoing_send(const SCTPasp__Types::ASP__SCTP__Close& send_par);
|
|
void outgoing_send(const SCTPasp__Types::ASP__SCTP& send_par);
|
|
|
|
virtual void incoming_message(const SCTPasp__Types::ASP__SCTP& incoming_par) = 0;
|
|
virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__ASSOC__CHANGE& incoming_par) = 0;
|
|
virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__PEER__ADDR__CHANGE& incoming_par) = 0;
|
|
virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__SEND__FAILED& incoming_par) = 0;
|
|
virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__REMOTE__ERROR& incoming_par) = 0;
|
|
virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__SHUTDOWN__EVENT& incoming_par) = 0;
|
|
virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__PARTIAL__DELIVERY__EVENT& incoming_par) = 0;
|
|
virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__ADAPTION__INDICATION& incoming_par) = 0;
|
|
virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__Connected& incoming_par) = 0;
|
|
virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__SENDMSG__ERROR& incoming_par) = 0;
|
|
virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__RESULT& incoming_par) = 0;
|
|
|
|
private:
|
|
enum return_value_t { WHOLE_MESSAGE_RECEIVED, PARTIAL_RECEIVE, EOF_OR_ERROR };
|
|
return_value_t getmsg(int fd, struct msghdr *msg);
|
|
void handle_event(void *buf);
|
|
void log(const char *fmt, ...);
|
|
void error(const char *fmt, ...);
|
|
void handle_event_reconnect(void *buf);
|
|
void forced_reconnect(int attempts);
|
|
// map operations
|
|
void map_put_item(int fd);
|
|
int map_get_item(int fd);
|
|
void map_delete_item_fd(int fd);
|
|
void map_delete_item(int index);
|
|
|
|
void map_put_item_server(int fd, struct in_addr local_IP_address, unsigned short local_port);
|
|
int map_get_item_server(int fd);
|
|
void map_delete_item_fd_server(int fd);
|
|
void map_delete_item_server(int index);
|
|
|
|
void create_socket();
|
|
in_addr get_in_addr(const char *hostname);
|
|
void setNonBlocking(int fd);
|
|
|
|
boolean simple_mode;
|
|
boolean reconnect;
|
|
int reconnect_max_attempts;
|
|
boolean server_mode;
|
|
boolean debug;
|
|
int server_backlog;
|
|
struct in_addr local_IP_address;
|
|
struct in_addr peer_IP_address;
|
|
unsigned short local_port;
|
|
unsigned short peer_port;
|
|
|
|
struct sctp_event_subscribe events;
|
|
struct sctp_initmsg initmsg;
|
|
|
|
boolean local_port_is_present;
|
|
boolean peer_IP_address_is_present;
|
|
boolean peer_port_is_present;
|
|
|
|
int fd;
|
|
fd_set readfds, writefds;
|
|
int receiving_fd;
|
|
|
|
struct fd_map_item;
|
|
fd_map_item *fd_map;
|
|
int list_len;
|
|
|
|
struct fd_map_server_item;
|
|
fd_map_server_item *fd_map_server;
|
|
int list_len_server;
|
|
|
|
|
|
};
|
|
}
|
|
#endif
|