2 *******************************************************************
4 * Copyright 2016 Samsung Electronics All Rights Reserved.
6 *-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
20 *-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
22 package org.iotivity.cloud.util;
24 import org.iotivity.cloud.base.protocols.coap.CoapMessage;
25 import org.iotivity.cloud.base.protocols.coap.CoapRequest;
27 import io.netty.buffer.ByteBuf;
28 import io.netty.channel.ChannelDuplexHandler;
29 import io.netty.channel.ChannelHandler.Sharable;
30 import io.netty.channel.ChannelHandlerContext;
31 import io.netty.channel.ChannelPromise;
35 * This class provides a set of APIs to print out logs for CoAP request and
40 public class CoapLogHandler extends ChannelDuplexHandler {
43 public void write(ChannelHandlerContext ctx, Object msg,
44 ChannelPromise promise) {
46 if (msg instanceof CoapMessage) {
48 CoapMessage coapMessage = (CoapMessage) msg;
50 StringBuilder strBuilder = new StringBuilder();
51 strBuilder.append(getStringCtx(ctx));
53 "\n/******************************************************************************/\n");
54 strBuilder.append(getStringCoapMessage(coapMessage));
56 "\n/******************************************************************************/\n");
57 Logger.d(strBuilder.toString());
59 } else if (msg instanceof String) {
61 String message = (String) msg;
63 StringBuilder strBuilder = new StringBuilder();
64 strBuilder.append(getStringCtx(ctx));
66 "\n/******************************************************************************/\n");
67 strBuilder.append(message);
69 "\n/******************************************************************************/\n");
70 Logger.d(strBuilder.toString());
72 ByteBuf outByteBuf = ctx.alloc().buffer();
73 outByteBuf.writeBytes(message.getBytes());
80 public void channelRead(ChannelHandlerContext ctx, Object msg)
83 if (msg instanceof CoapMessage) {
85 CoapMessage coapMessage = (CoapMessage) msg;
87 StringBuilder strBuilder = new StringBuilder();
88 strBuilder.append(getStringCtx(ctx));
90 "\n/******************************************************************************/\n");
91 strBuilder.append(getStringCoapMessage(coapMessage));
93 "\n/******************************************************************************/\n");
94 Logger.d(strBuilder.toString());
96 } else if (msg instanceof ByteBuf) {
98 ByteBuf inByteBuf = (ByteBuf) msg;
100 String message = null;
101 StringBuffer strBuffer = new StringBuffer();
102 while (inByteBuf.isReadable()) {
103 strBuffer.append((char) inByteBuf.readByte());
105 message = strBuffer.toString();
107 StringBuilder strBuilder = new StringBuilder();
108 strBuilder.append(getStringCtx(ctx));
110 "\n/******************************************************************************/\n");
111 strBuilder.append(message);
113 "\n/******************************************************************************/\n");
114 Logger.d(strBuilder.toString());
117 ctx.fireChannelRead(msg);
120 private String getStringCtx(ChannelHandlerContext ctx) {
122 StringBuilder strBuilder = new StringBuilder();
124 strBuilder.append("\n");
125 strBuilder.append("Local Address: ");
126 strBuilder.append(ctx.channel().localAddress().toString());
128 strBuilder.append("\n");
129 strBuilder.append("Remote Address: ");
130 strBuilder.append(ctx.channel().remoteAddress().toString());
132 return strBuilder.toString();
135 private String getStringCoapMessage(CoapMessage coapMessage) {
137 StringBuilder strBuilder = new StringBuilder();
139 strBuilder.append("Code: ");
140 strBuilder.append(coapMessage.getCode());
141 strBuilder.append("\n");
143 strBuilder.append("Token Length: ");
144 strBuilder.append(coapMessage.getTokenLength());
145 strBuilder.append("\n");
147 strBuilder.append("Token Data: ");
148 strBuilder.append(coapMessage.getTokenString());
149 strBuilder.append("\n");
151 if (coapMessage instanceof CoapRequest) {
153 CoapRequest coapRequest = (CoapRequest) coapMessage;
155 strBuilder.append("Option URI_PATH: ");
156 strBuilder.append(coapRequest.getUriPath());
157 strBuilder.append("\n");
159 strBuilder.append("Option URI_QUERY: ");
160 strBuilder.append(coapRequest.getUriQuery());
161 strBuilder.append("\n");
164 strBuilder.append("Option CONTENT_FORMAT: ");
165 strBuilder.append(coapMessage.getContentFormatString());
166 strBuilder.append("\n");
168 strBuilder.append("Payload Length: ");
169 strBuilder.append(coapMessage.getPayloadSize());
171 strBuilder.append("\n");
172 strBuilder.append("Payload Data: ");
173 strBuilder.append(coapMessage.getPayloadString());
175 return strBuilder.toString();