22#include "mythprototransfer.h"
23#include "../private/debug.h"
24#include "../private/socket.h"
25#include "../private/os/threads/latch.h"
26#include "../private/builtin.h"
38ProtoTransfer::ProtoTransfer(
const std::string& server,
unsigned port,
const std::string& pathname,
const std::string& sgname)
45, m_storageGroupName(sgname)
49bool ProtoTransfer::Open()
55 if (!OpenConnection(PROTO_TRANSFER_RCVBUF))
58 if (m_protoVersion >= 75)
70void ProtoTransfer::Close()
72 OS::WriteLock lock(*m_latch);
81void ProtoTransfer::Lock()
86void ProtoTransfer::Unlock()
93 OS::WriteLock lock(*m_latch);
97 char buf[PROTO_BUFFER_SIZE];
98 size_t n = (size_t)unread;
101 size_t s = (n > PROTO_BUFFER_SIZE ? PROTO_BUFFER_SIZE : n);
102 if(m_socket->ReceiveData(buf, s) != s)
106 DBG(DBG_DEBUG,
"%s: unreaded bytes (%u)\n", __FUNCTION__, (
unsigned)n);
112bool ProtoTransfer::Announce75()
114 OS::WriteLock lock(*m_latch);
116 std::string cmd(
"ANN FileTransfer ");
117 cmd.append(m_socket->GetMyHostName());
118 cmd.append(
" 0 0 1000" PROTO_STR_SEPARATOR);
119 cmd.append(m_pathName).append(PROTO_STR_SEPARATOR);
120 cmd.append(m_storageGroupName);
121 if (!SendCommand(cmd.c_str()))
125 if (!
ReadField(field) || !IsMessageOK(field))
127 if (!
ReadField(field) || 0 != string_to_uint32(field.c_str(), &m_fileId))
138uint32_t ProtoTransfer::GetFileId()
const
143std::string ProtoTransfer::GetPathName()
const
148std::string ProtoTransfer::GetStorageGroupName()
const
150 return m_storageGroupName;
153int64_t ProtoTransfer::GetSize()
const
155 OS::ReadLock lock(*m_latch);
159int64_t ProtoTransfer::GetPosition()
const
161 OS::ReadLock lock(*m_latch);
165int64_t ProtoTransfer::GetRequested()
const
167 OS::ReadLock lock(*m_latch);
171int64_t ProtoTransfer::GetRemaining()
const
173 OS::ReadLock lock(*m_latch);
177void ProtoTransfer::SetSize(int64_t size)
179 OS::WriteLock lock(*m_latch);
183void ProtoTransfer::SetPosition(int64_t position)
185 OS::WriteLock lock(*m_latch);
189void ProtoTransfer::SetRequested(int64_t requested)
191 OS::WriteLock lock(*m_latch);
bool m_tainted
Connection has hung since last reset.
bool ReadField(std::string &field)
bool m_hang
Connection hang: while true allow retry.
int64_t m_fileRequest
Current requested position.
int64_t m_fileSize
Size of file.
int64_t m_filePosition
Current read position.
void Flush()
Flushing unread data previously requested.
This is the main namespace that encloses all public classes.