int serialize_varint(struct buff *buf, const uint64 val) { int res; uint8 c; if (val < 253) { c = val; return serialize_uint8(buf, c); } else if (val < 0x10000) { uint16 len16 = val; c = 253; res = serialize_uint8(buf, c); if (res) { return res; } return serialize_uint16(buf, len16); } else { uint32 len32 = val; c = 254; res = serialize_uint8(buf, c); if (res) { return res; } return serialize_uint32(buf, len32); } }
// Should write versions numbers and base name void Cacher::write_header(void){ if (file.is_open()) file.close(); file.open(m_cacheFilename.c_str(), ios::out|ios::binary); serialize_uint8(CACHER_MAJOR_VERSION); serialize_uint8(CACHER_MINOR_VERSION); serialize_string(m_baseName); serialize_nl(); }
int script_txo_generate(const uint160 *pubkey, uint8 **script, uint64 *scriptLen) { struct buff *buf = buff_alloc(); serialize_uint8(buf, OP_DUP); serialize_uint8(buf, OP_HASH160); script_push_data(buf, pubkey, sizeof *pubkey); serialize_uint8(buf, OP_EQUALVERIFY); serialize_uint8(buf, OP_CHECKSIG); *script = buff_base(buf); *scriptLen = buff_curlen(buf); free(buf); return 0; }
static void script_push_data(struct buff *buf, const void *data, size_t len) { ASSERT(buf->grow); Log("%s: len=%zu / %#zx\n", __FUNCTION__, len, len); if (len < OP_PUSHDATA1) { serialize_uint8(buf, len); } else if (len <= 0xff) { serialize_uint8(buf, OP_PUSHDATA1); serialize_uint8(buf, len); } else if (len <= 0xffff) { serialize_uint8(buf, OP_PUSHDATA2); serialize_uint16(buf, len); } else { serialize_uint8(buf, OP_PUSHDATA4); serialize_uint32(buf, len); } serialize_bytes(buf, data, len); }
void serialize_header(pokeheader *header, char **outstream) { char buff8; char buff8b; char *buff32 = ( char *) malloc(4*sizeof( char)); buff32 = serialize_uint32(buff32, header->type); buff8 = serialize_uint8(buff8, header->id); buff8b = serialize_uint8(buff8b, header->data_size); char *instream = ( char *) malloc(7* sizeof( char)); for(int i = 0; i< 4; i++){ instream[i] = buff32[i]; } instream[4] = buff8; instream[5] = buff8b; memcpy(*outstream, instream, 7 ); free(buff32); free(instream); }