1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2013 The Android Open Source Project
3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License");
5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License.
6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at
7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//      http://www.apache.org/licenses/LICENSE-2.0
9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software
11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS,
12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and
14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License.
15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
160364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
170364fb6b844aca8265f240ccb3693edb0e365edfBen Chan#ifndef SHILL_CONNECTION_INFO_H_
180364fb6b844aca8265f240ccb3693edb0e365edfBen Chan#define SHILL_CONNECTION_INFO_H_
190364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
20cc67c52a2c00f90e877971d552208dd99825d84eBen Chan#include <base/macros.h>
210364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
228d6b59704591ba9fad57751858835dc332dbdd37Peter Qiu#include "shill/net/ip_address.h"
230364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
240364fb6b844aca8265f240ccb3693edb0e365edfBen Channamespace shill {
250364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
260364fb6b844aca8265f240ccb3693edb0e365edfBen Chanclass ConnectionInfo {
270364fb6b844aca8265f240ccb3693edb0e365edfBen Chan public:
280364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  ConnectionInfo();
290364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  ConnectionInfo(int protocol,
307fab89734d88724a288e96a9996b15548c5294c7Ben Chan                 int64_t time_to_expire_seconds,
310364fb6b844aca8265f240ccb3693edb0e365edfBen Chan                 bool is_unreplied,
320364fb6b844aca8265f240ccb3693edb0e365edfBen Chan                 IPAddress original_source_ip_address,
337fab89734d88724a288e96a9996b15548c5294c7Ben Chan                 uint16_t original_source_port,
340364fb6b844aca8265f240ccb3693edb0e365edfBen Chan                 IPAddress original_destination_ip_address,
357fab89734d88724a288e96a9996b15548c5294c7Ben Chan                 uint16_t original_destination_port,
360364fb6b844aca8265f240ccb3693edb0e365edfBen Chan                 IPAddress reply_source_ip_address,
377fab89734d88724a288e96a9996b15548c5294c7Ben Chan                 uint16_t reply_source_port,
380364fb6b844aca8265f240ccb3693edb0e365edfBen Chan                 IPAddress reply_destination_ip_address,
397fab89734d88724a288e96a9996b15548c5294c7Ben Chan                 uint16_t reply_destination_port);
40a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  ConnectionInfo(const ConnectionInfo& info);
410364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  ~ConnectionInfo();
420364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
43a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  ConnectionInfo& operator=(const ConnectionInfo& info);
440364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
450364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  int protocol() const { return protocol_; }
460364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  void set_protocol(int protocol) { protocol_ = protocol; }
470364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
487fab89734d88724a288e96a9996b15548c5294c7Ben Chan  int64_t time_to_expire_seconds() const { return time_to_expire_seconds_; }
497fab89734d88724a288e96a9996b15548c5294c7Ben Chan  void set_time_to_expire_seconds(int64_t time_to_expire_seconds) {
500364fb6b844aca8265f240ccb3693edb0e365edfBen Chan    time_to_expire_seconds_ = time_to_expire_seconds;
510364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  }
520364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
530364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  bool is_unreplied() const { return is_unreplied_; }
540364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  void set_is_unreplied(bool is_unreplied) { is_unreplied_ = is_unreplied; }
550364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
56a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  const IPAddress& original_source_ip_address() const {
570364fb6b844aca8265f240ccb3693edb0e365edfBen Chan    return original_source_ip_address_;
580364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  }
590364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  void set_original_source_ip_address(
60a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart      const IPAddress& original_source_ip_address) {
610364fb6b844aca8265f240ccb3693edb0e365edfBen Chan    original_source_ip_address_ = original_source_ip_address;
620364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  }
630364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
647fab89734d88724a288e96a9996b15548c5294c7Ben Chan  uint16_t original_source_port() const { return original_source_port_; }
657fab89734d88724a288e96a9996b15548c5294c7Ben Chan  void set_original_source_port(uint16_t original_source_port) {
660364fb6b844aca8265f240ccb3693edb0e365edfBen Chan    original_source_port_ = original_source_port;
670364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  }
680364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
69a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  const IPAddress& original_destination_ip_address() const {
700364fb6b844aca8265f240ccb3693edb0e365edfBen Chan    return original_destination_ip_address_;
710364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  }
720364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  void set_original_destination_ip_address(
73a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart      const IPAddress& original_destination_ip_address) {
740364fb6b844aca8265f240ccb3693edb0e365edfBen Chan    original_destination_ip_address_ = original_destination_ip_address;
750364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  }
760364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
777fab89734d88724a288e96a9996b15548c5294c7Ben Chan  uint16_t original_destination_port() const {
780364fb6b844aca8265f240ccb3693edb0e365edfBen Chan    return original_destination_port_;
790364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  }
807fab89734d88724a288e96a9996b15548c5294c7Ben Chan  void set_original_destination_port(uint16_t original_destination_port) {
810364fb6b844aca8265f240ccb3693edb0e365edfBen Chan    original_destination_port_ = original_destination_port;
820364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  }
830364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
84a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  const IPAddress& reply_source_ip_address() const {
850364fb6b844aca8265f240ccb3693edb0e365edfBen Chan    return reply_source_ip_address_;
860364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  }
870364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  void set_reply_source_ip_address(
88a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart      const IPAddress& reply_source_ip_address) {
890364fb6b844aca8265f240ccb3693edb0e365edfBen Chan    reply_source_ip_address_ = reply_source_ip_address;
900364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  }
910364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
927fab89734d88724a288e96a9996b15548c5294c7Ben Chan  uint16_t reply_source_port() const { return reply_source_port_; }
937fab89734d88724a288e96a9996b15548c5294c7Ben Chan  void set_reply_source_port(uint16_t reply_source_port) {
940364fb6b844aca8265f240ccb3693edb0e365edfBen Chan    reply_source_port_ = reply_source_port;
950364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  }
960364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
97a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  const IPAddress& reply_destination_ip_address() const {
980364fb6b844aca8265f240ccb3693edb0e365edfBen Chan    return reply_destination_ip_address_;
990364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  }
1000364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  void set_reply_destination_ip_address(
101a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart      const IPAddress& reply_destination_ip_address) {
1020364fb6b844aca8265f240ccb3693edb0e365edfBen Chan    reply_destination_ip_address_ = reply_destination_ip_address;
1030364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  }
1040364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
1057fab89734d88724a288e96a9996b15548c5294c7Ben Chan  uint16_t reply_destination_port() const { return reply_destination_port_; }
1067fab89734d88724a288e96a9996b15548c5294c7Ben Chan  void set_reply_destination_port(uint16_t reply_destination_port) {
1070364fb6b844aca8265f240ccb3693edb0e365edfBen Chan    reply_destination_port_ = reply_destination_port;
1080364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  }
1090364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
1100364fb6b844aca8265f240ccb3693edb0e365edfBen Chan private:
1110364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  int protocol_;
1127fab89734d88724a288e96a9996b15548c5294c7Ben Chan  int64_t time_to_expire_seconds_;
1130364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  bool is_unreplied_;
1140364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
1150364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  IPAddress original_source_ip_address_;
1167fab89734d88724a288e96a9996b15548c5294c7Ben Chan  uint16_t original_source_port_;
1170364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  IPAddress original_destination_ip_address_;
1187fab89734d88724a288e96a9996b15548c5294c7Ben Chan  uint16_t original_destination_port_;
1190364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
1200364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  IPAddress reply_source_ip_address_;
1217fab89734d88724a288e96a9996b15548c5294c7Ben Chan  uint16_t reply_source_port_;
1220364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  IPAddress reply_destination_ip_address_;
1237fab89734d88724a288e96a9996b15548c5294c7Ben Chan  uint16_t reply_destination_port_;
1240364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
1250364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  // No DISALLOW_COPY_AND_ASSIGN(ConnectionInfo) as ConnectionInfo needs to be
1260364fb6b844aca8265f240ccb3693edb0e365edfBen Chan  // kept in STL containers.
1270364fb6b844aca8265f240ccb3693edb0e365edfBen Chan};
1280364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
1290364fb6b844aca8265f240ccb3693edb0e365edfBen Chan}  // namespace shill
1300364fb6b844aca8265f240ccb3693edb0e365edfBen Chan
1310364fb6b844aca8265f240ccb3693edb0e365edfBen Chan#endif  // SHILL_CONNECTION_INFO_H_
132