/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.quickserverlab.quickcached.binary; import java.util.logging.Logger; import com.quickserverlab.quickcached.HexUtil; import com.quickserverlab.quickcached.Util; /** * * @author akshath */ public class RequestHeader extends Header { private static final Logger logger = Logger.getLogger(RequestHeader.class.getName()); private String vbucketId; public String getVbucketId() { return vbucketId; } public void setVbucketId(String vbucketId) { this.vbucketId = vbucketId; } /* Byte/ 0 | 1 | 2 | 3 | / | | | | |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| +---------------+---------------+---------------+---------------+ 0| Magic | Opcode | Key length | +---------------+---------------+---------------+---------------+ 4| Extras length | Data type | vbucket id | +---------------+---------------+---------------+---------------+ 8| Total body length | +---------------+---------------+---------------+---------------+ 12| Opaque | +---------------+---------------+---------------+---------------+ 16| CAS | | | +---------------+---------------+---------------+---------------+ */ public static RequestHeader parse(byte rawinput[]) throws Exception { try { String hexData = HexUtil.encode(rawinput); if(hexData.length()!=48) throw new IllegalArgumentException("Bad Header passed: "+hexData); RequestHeader header = new RequestHeader(); header.setMagic(hexData.substring(0,2));//2 header.setOpcode(hexData.substring(2,4));//2 header.setKeyLength( Util.hex2decimal(hexData.substring(4,8)) );//4 header.setExtrasLength( Util.hex2decimal(hexData.substring(8,10)) );//2 header.setDataType(hexData.substring(10,12));//2 header.setVbucketId(hexData.substring(12,16));//4 header.setTotalBodyLength( Util.hex2decimal(hexData.substring(16,24)) );//8 header.setOpaque(hexData.substring(24,32));//8 header.setCas(hexData.substring(32));//16 return header; } catch(Exception e) { logger.warning("Error: "+e); throw e; } } public String toString() { StringBuilder sb = new StringBuilder(); sb.append("[RequestHeader {"); sb.append("Magic:"); sb.append(getMagic()); sb.append(", Opcode:"); sb.append(getOpcode()); sb.append(", KeyLength:"); sb.append(getKeyLength()); sb.append(", ExtrasLength:"); sb.append(getExtrasLength()); sb.append(", DataType:"); sb.append(getDataType()); sb.append(", VbucketId:"); sb.append(getVbucketId()); sb.append(", TotalBodyLength:"); sb.append(getTotalBodyLength()); sb.append(", Opaque:"); sb.append(getOpaque()); sb.append(", Cas:"); sb.append(getCas()); sb.append("}]"); return sb.toString(); } }