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 java.nio.charset.StandardCharsets;
26 import org.iotivity.cloud.base.protocols.coap.CoapMessage;
27 import org.iotivity.cloud.base.protocols.coap.CoapRequest;
29 import io.netty.buffer.ByteBuf;
30 import io.netty.channel.ChannelDuplexHandler;
31 import io.netty.channel.ChannelHandler.Sharable;
32 import io.netty.channel.ChannelHandlerContext;
33 import io.netty.channel.ChannelPromise;
37 * This class provides a set of APIs to print out logs for CoAP request and
42 public class CoapLogHandler extends ChannelDuplexHandler {
45 public void write(ChannelHandlerContext ctx, Object msg,
46 ChannelPromise promise) {
48 if (msg instanceof CoapMessage) {
50 CoapMessage coapMessage = (CoapMessage) msg;
52 StringBuilder strBuilder = new StringBuilder();
53 strBuilder.append(getStringCtx(ctx));
55 "\n/******************************************************************************/\n");
56 strBuilder.append(getStringCoapMessage(coapMessage));
58 "\n/******************************************************************************/\n");
59 Logger.d(strBuilder.toString());
61 } else if (msg instanceof String) {
63 String message = (String) msg;
65 StringBuilder strBuilder = new StringBuilder();
66 strBuilder.append(getStringCtx(ctx));
68 "\n/******************************************************************************/\n");
69 strBuilder.append(message);
71 "\n/******************************************************************************/\n");
72 Logger.d(strBuilder.toString());
74 ByteBuf outByteBuf = ctx.alloc().buffer();
75 outByteBuf.writeBytes(message.getBytes(StandardCharsets.UTF_8));
82 public void channelRead(ChannelHandlerContext ctx, Object msg)
85 if (msg instanceof CoapMessage) {
87 CoapMessage coapMessage = (CoapMessage) msg;
89 StringBuilder strBuilder = new StringBuilder();
90 strBuilder.append(getStringCtx(ctx));
92 "\n/******************************************************************************/\n");
93 strBuilder.append(getStringCoapMessage(coapMessage));
95 "\n/******************************************************************************/\n");
96 Logger.d(strBuilder.toString());
98 } else if (msg instanceof ByteBuf) {
100 ByteBuf inByteBuf = (ByteBuf) msg;
102 String message = null;
103 StringBuffer strBuffer = new StringBuffer();
104 while (inByteBuf.isReadable()) {
105 strBuffer.append((char) inByteBuf.readByte());
107 message = strBuffer.toString();
109 StringBuilder strBuilder = new StringBuilder();
110 strBuilder.append(getStringCtx(ctx));
112 "\n/******************************************************************************/\n");
113 strBuilder.append(message);
115 "\n/******************************************************************************/\n");
116 Logger.d(strBuilder.toString());
119 ctx.fireChannelRead(msg);
122 private String getStringCtx(ChannelHandlerContext ctx) {
124 StringBuilder strBuilder = new StringBuilder();
126 strBuilder.append("\n");
127 strBuilder.append("Local Address: ");
128 strBuilder.append(ctx.channel().localAddress().toString());
130 strBuilder.append("\n");
131 strBuilder.append("Remote Address: ");
132 strBuilder.append(ctx.channel().remoteAddress().toString());
134 return strBuilder.toString();
137 private String getStringCoapMessage(CoapMessage coapMessage) {
139 StringBuilder strBuilder = new StringBuilder();
141 strBuilder.append("Code: ");
142 strBuilder.append(coapMessage.getCode());
143 strBuilder.append("\n");
145 strBuilder.append("Token Length: ");
146 strBuilder.append(coapMessage.getTokenLength());
147 strBuilder.append("\n");
149 strBuilder.append("Token Data: ");
150 strBuilder.append(coapMessage.getTokenString());
151 strBuilder.append("\n");
153 if (coapMessage instanceof CoapRequest) {
155 CoapRequest coapRequest = (CoapRequest) coapMessage;
157 strBuilder.append("Option URI_PATH: ");
158 strBuilder.append(coapRequest.getUriPath());
159 strBuilder.append("\n");
161 strBuilder.append("Option URI_QUERY: ");
162 strBuilder.append(coapRequest.getUriQuery());
163 strBuilder.append("\n");
166 strBuilder.append("Option CONTENT_FORMAT: ");
167 strBuilder.append(coapMessage.getContentFormatString());
168 strBuilder.append("\n");
170 strBuilder.append("Payload Length: ");
171 strBuilder.append(coapMessage.getPayloadSize());
173 strBuilder.append("\n");
174 strBuilder.append("Payload Data: ");
175 strBuilder.append(coapMessage.getPayloadString());
177 return strBuilder.toString();