summaryrefslogtreecommitdiff
path: root/server/connection.cpp
blob: bd2d78cd2ee0a9fa4d8d4c5816f9ba462143e474 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*
 * connection.cpp
 *
 *  Created on: 31.07.2012
 *      Author: savop
 */

#ifndef CONNECTION_CPP_
#define CONNECTION_CPP_

#include <stdlib.h>
#include <limits.h>
#include <time.h>
#include "../include/connection.h"

using namespace upnp;

cVirtualConnection::cVirtualConnection(
    int32_t connectionID,
    const std::string& remoteProtocolInfo,
    const std::string& peerConnectionManager,
    int32_t peerConnectionID,
    Direction direction) :
  mRemoteProtocolInfo(remoteProtocolInfo),
  mPeerConnectionManager(peerConnectionManager),
  mPeerConnectionID(peerConnectionID),
  mConnectionID(connectionID),
  mAVTransportID(-1),
  mRcsID(-1),
  mDirection(direction),
  mStatus(VC_OKAY)
{
}

cVirtualConnection::cVirtualConnection(const cVirtualConnection & other) :
  mRemoteProtocolInfo(other.mRemoteProtocolInfo),
  mPeerConnectionManager(other.mPeerConnectionManager),
  mPeerConnectionID(other.mPeerConnectionID),
  mConnectionID(other.mConnectionID),
  mAVTransportID(other.mAVTransportID),
  mRcsID(other.mRcsID),
  mDirection(other.mDirection),
  mStatus(other.mStatus)
{
}

cVirtualConnection & cVirtualConnection::operator =(const cVirtualConnection & other)
{
  mConnectionID = other.mConnectionID;
  mAVTransportID = other.mAVTransportID;
  mPeerConnectionID = other.mPeerConnectionID;
  mRcsID = other.mRcsID;
  mDirection = other.mDirection;
  mStatus = other.mStatus;
  mPeerConnectionManager = other.mPeerConnectionManager;
  mRemoteProtocolInfo = other.mRemoteProtocolInfo;

  return *this;
}

cVirtualConnection* cVirtualConnection::GenerateVirtualConnection(
    const std::string & remoteProtocolInfo,
    const std::string & peerConnectionManager,
    int32_t peerConnectionID,
    const std::string & direction)
{
  Direction eDirection;

  if        (direction.compare("Input")==0){
    eDirection = VC_INPUT;
  } else if (direction.compare("Output")==0){
    eDirection = VC_OUTPUT;
  } else {
    return NULL;
  }

  cVirtualConnection* connnection = new cVirtualConnection(
      cVirtualConnection::NextConnectionID(),
      remoteProtocolInfo, peerConnectionManager,
      peerConnectionID, eDirection );

  return connnection;
}

cVirtualConnection* cVirtualConnection::GenerateVirtualConnection(
    const std::string & remoteProtocolInfo,
    const std::string & peerConnectionManager,
    int32_t peerConnectionID,
    Direction direction)
{
  cVirtualConnection* connnection = new cVirtualConnection(
      cVirtualConnection::NextConnectionID(),
      remoteProtocolInfo, peerConnectionManager,
      peerConnectionID, direction );

  return connnection;
}

void cVirtualConnection::DestroyVirtualConnection(cVirtualConnection* connection){
  delete connection;
}

int32_t cVirtualConnection::NextConnectionID(){
  static int32_t lastConnectionID = 0;

  if(lastConnectionID == INT_MAX) lastConnectionID = 1;

  return lastConnectionID++;
}

std::string cVirtualConnection::GetDirectionString() const {
  switch (mDirection){
  case VC_INPUT:
    return "Input";
  case VC_OUTPUT:
    return "Output";
  default:
    return NULL;
  }
}

std::string cVirtualConnection::GetStatusString() const {
  switch (mStatus){
  case VC_CONTENT_FORMAT_MISMATCH:
    return "ContentFormatMismatch";
  case VC_INSUFFICIENT_BANDWIDTH:
    return "InsufficientBandwidth";
  case VC_OKAY:
    return "OK";
  case VC_UNKNOWN:
    return "Unknown";
  case VC_UNRELIABLE_CHANNEL:
    return "UnreliableChannel";
  default:
    return NULL;
  }
}

#endif /* CONNECTION_CPP_ */