X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/24bebc0ecf83446c7371eff69042322aab34976a..46fb2b4bbe3a0a8516ab04cfafa895a882c70f86:/rpc/rpc.cc diff --git a/rpc/rpc.cc b/rpc/rpc.cc index 9f1d90c..90d9608 100644 --- a/rpc/rpc.cc +++ b/rpc/rpc.cc @@ -676,117 +676,6 @@ int rpcs::rpcbind(unsigned int &r, int) { return 0; } -marshall & -operator<<(marshall &m, uint8_t x) { - m.rawbyte(x); - return m; -} - -marshall & -operator<<(marshall &m, uint16_t x) { - x = hton(x); - m.rawbytes((char *)&x, 2); - return m; -} - -marshall & -operator<<(marshall &m, uint32_t x) { - x = hton(x); - m.rawbytes((char *)&x, 4); - return m; -} - -marshall & operator<<(marshall &m, int32_t x) { return m << (uint32_t) x; } -marshall & operator<<(marshall &m, int8_t x) { return m << (uint8_t)x; } -marshall & operator<<(marshall &m, bool x) { return m << (uint8_t)x; } -marshall & operator<<(marshall &m, int16_t x) { return m << (uint16_t)x; } -marshall & operator<<(marshall &m, uint64_t x) { return m << (uint32_t)(x>>32) << (uint32_t)x; } - -marshall & -operator<<(marshall &m, const string &s) { - m << (unsigned int) s.size(); - m.rawbytes(s.data(), s.size()); - return m; -} - -void marshall::pack_req_header(const request_header &h) { - size_t saved_sz = index_; - //leave the first 4-byte empty for channel to fill size of pdu - index_ = sizeof(rpc_sz_t); - *this << h.xid << h.proc << h.clt_nonce << h.srv_nonce << h.xid_rep; - index_ = saved_sz; -} - -void marshall::pack_reply_header(const reply_header &h) { - size_t saved_sz = index_; - //leave the first 4-byte empty for channel to fill size of pdu - index_ = sizeof(rpc_sz_t); - *this << h.xid << h.ret; - index_ = saved_sz; -} - -// take the contents from another unmarshall object -void -unmarshall::take_in(unmarshall &another) -{ - if(buf_) - free(buf_); - another.take_buf(&buf_, &sz_); - index_ = RPC_HEADER_SZ; - ok_ = sz_ >= RPC_HEADER_SZ?true:false; -} - -inline bool -unmarshall::ensure(size_t n) { - if (index_+n > sz_) - ok_ = false; - return ok_; -} - -inline uint8_t -unmarshall::rawbyte() -{ - if (!ensure(1)) - return 0; - return (uint8_t)buf_[index_++]; -} - -void -unmarshall::rawbytes(string &ss, size_t n) -{ - VERIFY(ensure(n)); - ss.assign(buf_+index_, n); - index_ += n; -} - -template -void -unmarshall::rawbytes(T &t) -{ - const size_t n = sizeof(T); - VERIFY(ensure(n)); - memcpy(&t, buf_+index_, n); - t = ntoh(t); - index_ += n; -} - -unmarshall & operator>>(unmarshall &u, bool &x) { x = (bool)u.rawbyte(); return u; } -unmarshall & operator>>(unmarshall &u, uint8_t &x) { x = u.rawbyte(); return u; } -unmarshall & operator>>(unmarshall &u, int8_t &x) { x = (int8_t)u.rawbyte(); return u; } -unmarshall & operator>>(unmarshall &u, uint16_t &x) { u.rawbytes(x); return u; } -unmarshall & operator>>(unmarshall &u, int16_t &x) { u.rawbytes(x); return u; } -unmarshall & operator>>(unmarshall &u, uint32_t &x) { u.rawbytes(x); return u; } -unmarshall & operator>>(unmarshall &u, int32_t &x) { u.rawbytes(x); return u; } -unmarshall & operator>>(unmarshall &u, size_t &x) { uint32_t xx; u.rawbytes(xx); x = xx; return u; } -unmarshall & operator>>(unmarshall &u, uint64_t &x) { u.rawbytes(x); return u; } -unmarshall & operator>>(unmarshall &u, int64_t &x) { u.rawbytes(x); return u; } -unmarshall & operator>>(unmarshall &u, string &s) { - unsigned sz = u.grab(); - if(u.ok()) - u.rawbytes(s, sz); - return u; -} - bool operator<(const sockaddr_in &a, const sockaddr_in &b){ return ((a.sin_addr.s_addr < b.sin_addr.s_addr) || ((a.sin_addr.s_addr == b.sin_addr.s_addr) &&