OpenClonk
C4NetpuncherPacketCReq Class Reference

#include <C4PuncherPacket.h>

Inheritance diagram for C4NetpuncherPacketCReq:
[legend]
Collaboration diagram for C4NetpuncherPacketCReq:
[legend]

Public Types

typedef std::unique_ptr< C4NetpuncherPacketuptr
 

Public Member Functions

C4NetpuncherPacketType GetType () const final
 
 C4NetpuncherPacketCReq (const C4NetIOPacket &rpack)
 
 C4NetpuncherPacketCReq (const C4NetIO::addr_t &addr)
 
const C4NetIO::addr_tGetAddr ()
 
C4NetIOPacket PackTo (const C4NetIO::addr_t &) const
 

Static Public Member Functions

static std::unique_ptr< C4NetpuncherPacketConstruct (const C4NetIOPacket &rpack)
 

Protected Types

typedef C4NetpuncherID::value CID
 

Detailed Description

Definition at line 83 of file C4PuncherPacket.h.

Member Typedef Documentation

◆ CID

typedef C4NetpuncherID::value C4NetpuncherPacket::CID
protectedinherited

Definition at line 49 of file C4PuncherPacket.h.

◆ uptr

typedef std::unique_ptr<C4NetpuncherPacket> C4NetpuncherPacket::uptr
inherited

Definition at line 42 of file C4PuncherPacket.h.

Constructor & Destructor Documentation

◆ C4NetpuncherPacketCReq() [1/2]

C4NetpuncherPacketCReq::C4NetpuncherPacketCReq ( const C4NetIOPacket rpack)
explicit

Definition at line 60 of file C4PuncherPacket.cpp.

60  {
61  if (rpack.getPSize() < HeaderPSize + 2 + 16) throw "invalid size";
62  uint16_t port = *getBufPtr<uint16_t>(rpack, HeaderSize);
63  addr.SetAddress(C4NetIO::addr_t::Any, port);
64  memcpy(&static_cast<sockaddr_in6*>(&addr)->sin6_addr, getBufPtr<char>(rpack, HeaderSize + sizeof(port)), 16);
65 }
size_t getPSize() const
Definition: C4NetIO.h:321
void SetAddress(const sockaddr *addr)
Definition: C4NetIO.cpp:364

References C4NetIOPacket::getPSize().

Here is the call graph for this function:

◆ C4NetpuncherPacketCReq() [2/2]

C4NetpuncherPacketCReq::C4NetpuncherPacketCReq ( const C4NetIO::addr_t addr)
inlineexplicit

Definition at line 90 of file C4PuncherPacket.h.

90 : addr(addr) {};

Member Function Documentation

◆ Construct()

std::unique_ptr< C4NetpuncherPacket > C4NetpuncherPacket::Construct ( const C4NetIOPacket rpack)
staticinherited

Definition at line 30 of file C4PuncherPacket.cpp.

30  {
31  if (!rpack.getPData() || *rpack.getPData() != C4NetpuncherProtocolVersion) return nullptr;
32  try {
33  switch (rpack.getStatus())
34  {
35  case PID_Puncher_AssID: return uptr(new C4NetpuncherPacketAssID(rpack));
36  case PID_Puncher_SReq: return uptr(new C4NetpuncherPacketSReq(rpack));
37  case PID_Puncher_CReq: return uptr(new C4NetpuncherPacketCReq(rpack));
38  case PID_Puncher_IDReq: return uptr(new C4NetpuncherPacketIDReq(rpack));
39  default: return nullptr;
40  }
41  }
42  catch (StdCompiler::Exception *e) { delete e; return nullptr; }
43  catch (...) { return nullptr; }
44 }
@ PID_Puncher_SReq
@ PID_Puncher_CReq
@ PID_Puncher_AssID
@ PID_Puncher_IDReq
uint8_t getStatus() const
Definition: C4NetIO.h:319
const char * getPData() const
Definition: C4NetIO.h:320
std::unique_ptr< C4NetpuncherPacket > uptr

References C4NetIOPacket::getPData().

Referenced by C4Network2IO::HandlePuncherPacket().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetAddr()

const C4NetIO::addr_t& C4NetpuncherPacketCReq::GetAddr ( )
inline

Definition at line 91 of file C4PuncherPacket.h.

91 { return addr; }

◆ GetType()

C4NetpuncherPacketType C4NetpuncherPacketCReq::GetType ( ) const
inlinefinalvirtual

Implements C4NetpuncherPacket.

Definition at line 88 of file C4PuncherPacket.h.

88 { return PID_Puncher_CReq; }

References PID_Puncher_CReq.

◆ PackTo()

C4NetIOPacket C4NetpuncherPacket::PackTo ( const C4NetIO::addr_t addr) const
inherited

Definition at line 45 of file C4PuncherPacket.cpp.

45  {
46  C4NetIOPacket pkt;
47  pkt.SetAddr(addr);
48  StdBuf content(PackInto());
49  char type = GetType();
50  pkt.New(sizeof(type) + sizeof(C4NetpuncherProtocolVersion) + content.getSize());
51  size_t offset = 0;
52  pkt.Write(&type, sizeof(type), offset);
53  offset += sizeof(type);
54  pkt.Write(&C4NetpuncherProtocolVersion, sizeof(C4NetpuncherProtocolVersion), offset);
55  offset += sizeof(C4NetpuncherProtocolVersion);
56  pkt.Write(content, offset);
57  return pkt;
58 }
void SetAddr(const C4NetIO::addr_t &naddr)
Definition: C4NetIO.h:328
virtual StdBuf PackInto() const =0
virtual C4NetpuncherPacketType GetType() const =0
Definition: StdBuf.h:30
void New(size_t inSize)
Definition: StdBuf.h:146
void Write(const void *pnData, size_t inSize, size_t iAt=0)
Definition: StdBuf.h:153

References C4NetpuncherPacket::GetType(), StdBuf::New(), C4NetpuncherPacket::PackInto(), and C4NetIOPacket::SetAddr().

Referenced by C4Network2IO::SendPuncherPacket().

Here is the call graph for this function:
Here is the caller graph for this function:

The documentation for this class was generated from the following files: