35 Impl(
const std::string & command_r )
38 Impl(
const std::string & command_r,
const std::string body_r )
42 Impl( std::istream & stream_r );
53 if ( command_r.find(
'\n' ) != std::string::npos )
58 const std::string &
body()
const
64 void setBody(
const std::string & body_r )
69 typedef std::pair<HeaderList::iterator,HeaderList::iterator>
KeyRange;
77 const std::string &
getHeader(
const std::string & key_r )
const
80 if ( r.first == r.second )
82 const std::string & ret( r.first->second );
83 if ( ++r.first != r.second )
88 const std::string &
getHeader(
const std::string & key_r,
const std::string & default_r )
const
91 if ( r.first == r.second )
93 const std::string & ret( r.first->second );
94 if ( ++r.first != r.second )
99 const std::string &
getHeaderNT(
const std::string & key_r,
const std::string & default_r )
const
102 return iter !=
_header.end() ? iter->second : default_r;
105 HeaderList::value_type
mkHeaderPair(
const std::string & key_r,
const std::string & value_r )
107 if ( key_r.find_first_of(
":\n" ) != std::string::npos )
109 if ( value_r.find_first_of(
":\n" ) != std::string::npos )
111 return HeaderList::value_type( key_r, value_r );
114 void setHeader(
const std::string & key_r,
const std::string & value_r )
120 void addHeader(
const std::string & key_r,
const std::string & value_r )
131 std::ostream &
writeTo( std::ostream & stream_r )
const;
142 static shared_ptr<Impl> _nullimpl(
new Impl );
146 friend Impl * rwcowClone<Impl>(
const Impl * rhs );
149 {
return new Impl( *
this ); }
156 return str <<
"PluginFrame[" << obj.
command() <<
"](" << obj.
headerList().size() <<
"){" << obj.
body().size() <<
"}";
174 if ( ! stream_r.good() )
180 if ( ! stream_r.good() )
187 if ( sep == std::string::npos )
190 _header.insert( HeaderList::value_type( data.substr(0,sep), data.substr(sep+1) ) );
195 if ( ! stream_r.good() )
206 stream_r << _command << endl;
208 for_( it, _header.begin(), _header.end() )
209 stream_r << it->first <<
':' << it->second << endl;
227 static std::string _val(
"ACK" );
233 static std::string _val(
"ERROR" );
242 : _pimpl( new
Impl( command_r ) )
246 : _pimpl( new
Impl( command_r, body_r ) )
250 : _pimpl( new
Impl( stream_r ) )
254 {
return _pimpl->empty(); }
257 {
return _pimpl->command(); }
260 {
_pimpl->setCommand( command_r ); }
263 {
return _pimpl->body(); }
266 {
return _pimpl->bodyRef(); }
269 {
_pimpl->setBody( body_r ); }
272 {
return _pimpl->writeTo( stream_r ); }
275 {
return _pimpl->headerList(); }
278 {
return _pimpl->headerList(); }
281 {
return _pimpl->getHeader( key_r ); }
284 {
return _pimpl->getHeader( key_r, default_r ); }
287 {
return _pimpl->getHeaderNT( key_r, default_r ); }
290 {
_pimpl->setHeader( key_r, value_r ); }
293 {
_pimpl->addHeader( key_r, value_r ); }
296 {
_pimpl->clearHeader( key_r ); }
301 {
return str << *obj.
_pimpl; }
PluginFrame()
Default ctor (empty frame)
static shared_ptr< Impl > nullimpl()
Offer default Impl.
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
const std::string & getHeaderNT(const std::string &key_r, const std::string &default_r) const
Command frame for communication with PluginScript.
void setCommand(const std::string &command_r)
Set the frame command.
const std::string & command() const
Return the frame command.
const std::string & getHeader(const std::string &key_r, const std::string &default_r) const
void clearHeader(const std::string &key_r)
Impl * clone() const
clone for RWCOW_pointer
Impl(const std::string &command_r)
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
void addHeader(const std::string &key_r, const std::string &value_r=std::string())
Add header for key_r leaving already existing headers for key_r unchanged.
static const std::string & errorCommand()
"ERROR" command.
void setCommand(const std::string &command_r)
const std::string & getHeader(const std::string &key_r) const
std::pair< HeaderListIterator, HeaderListIterator > constKeyRange
std::ostream & operator<<(std::ostream &str, const Exception &obj)
Base class for PluginFrame Exception.
std::pair< HeaderList::iterator, HeaderList::iterator > KeyRange
std::string getline(std::istream &str, const Trim trim_r)
Return stream content up to (but not returning) the next newline.
static const std::string & ackCommand()
"ACK" command.
RWCOW_pointer< Impl > _pimpl
Pointer to implementation.
void setHeader(const std::string &key_r, const std::string &value_r)
HeaderList & headerList()
bool operator==(const StrMatcher &lhs, const StrMatcher &rhs)
void setBody(const std::string &body_r)
Set the frame body.
std::multimap< std::string, std::string > HeaderList
The header list.
const std::string & getHeader(const std::string &key_r) const
Return header value for key_r.
HeaderList::value_type mkHeaderPair(const std::string &key_r, const std::string &value_r)
void addHeader(const std::string &key_r, const std::string &value_r)
HeaderList::const_iterator HeaderListIterator
Header list iterator.
std::string receiveUpTo(std::istream &str, const char delim_r, bool returnDelim_r)
Return stream content up to the next ocurrence of delim_r or EOF delim_r, if found, is always read from the stream.
const std::string & command() const
void setHeader(const std::string &key_r, const std::string &value_r=std::string())
Set header for key_r removing all other occurences of key_r.
HeaderList & headerList()
Modifyalble header list for internal use only.
std::ostream & writeTo(std::ostream &stream_r) const
std::ostream & operator<<(std::ostream &str, const PluginFrame::Impl &obj)
PluginFrame implementation.
std::ostream & writeTo(std::ostream &stream_r) const
Write frame to stream.
std::string & bodyRef()
Return a reference to the frame body.
bool empty() const
Whether this is an empty frame.
Impl(const std::string &command_r, const std::string body_r)
void clearHeader(const std::string &key_r)
Remove all headers for key_r.
void setBody(const std::string &body_r)
const HeaderList & headerList() const
const std::string & getHeaderNT(const std::string &key_r, const std::string &default_r=std::string()) const
Not throwing version returing one of the matching header values or default_r string.
const std::string & body() const
const std::string & body() const
Return the frame body.