/// <summary> /// This method is called to handle a Get_Parameters request /// </summary> /// <param name="m">The serialized Get_Parameters_Request message.</param> public static void HandleGetParameters(Message m) { ConnectionHelper ch = Program.toMihf; ushort transactionID = m.MIHHeader.TransactionID; Payload.TLVIterator it = m.Payload.GetTLVIterator(); ID srcID = new ID(new OctetString(it.Next().Value)); ID dstID = new ID(new OctetString(it.Next().Value)); Link_Get_Parameters_Request lgpr = new Link_Get_Parameters_Request(MIHDeserializer.DeserializeLinkParamRequest(it.Next()), new System.Collections.BitArray(it.Next().Value.Reverse().ToArray()), new System.Collections.BitArray(it.Next().Value.Reverse().ToArray())); Link_Get_Parameters_Confirm lgpc = new Link_Get_Parameters_Confirm(); try { lgpc.LinkParametersStatusList = new List <Link_Param>(lgpr.LinkParametersRequest.Count); lgpc.LinkStatesRspList = new List <Link_Get_Parameters_Confirm.Link_States_Rsp>(); lgpc.LinkDescRspList = new List <Link_Get_Parameters_Confirm.Link_Desc_Rsp>(); foreach (Link_Param_Type lpt in lgpr.LinkParametersRequest) { switch (lpt.AbsoluteType) { case Link_Param_Abs_Type.P80211_RSSI: lgpc.LinkParametersStatusList.Add(new Link_Param(lpt, Link_Param_802_11.GetRSSI_0)); break; case Link_Param_Abs_Type.GEN_Data_Rate: lgpc.LinkParametersStatusList.Add(new Link_Param(lpt, Link_Param_Gen.DataRate_0)); break; case Link_Param_Abs_Type.GEN_Sig_Strenth: lgpc.LinkParametersStatusList.Add(new Link_Param(lpt, Link_Param_Gen.SignalStrength_1)); break; case Link_Param_Abs_Type.GEN_Packet_Error_Rate: lgpc.LinkParametersStatusList.Add(new Link_Param(lpt, Link_Param_Gen.PacketErrorRate_4)); break; } } //-------LinkStates if (lgpr.LinkStatesRequest[0]) //OP_MODE { lgpc.LinkStatesRspList.Add(new Link_Get_Parameters_Confirm.Link_States_Rsp(Link_Get_Parameters_Confirm.Link_States_Rsp.Type.OP_MODE, (ushort)GenericInfo.WlanInterfaceInstance.OP_Mode_802_21)); } if (lgpr.LinkStatesRequest[1]) { lgpc.LinkStatesRspList.Add(new Link_Get_Parameters_Confirm.Link_States_Rsp(Link_Get_Parameters_Confirm.Link_States_Rsp.Type.CHANNEL_ID, (ushort)GenericInfo.WlanInterfaceInstance.Channel)); } //----------- //-------LinkDesc if (lgpr.LinkDescriptorsRequest[0]) { lgpc.LinkDescRspList.Add(new Link_Get_Parameters_Confirm.Link_Desc_Rsp(Link_Get_Parameters_Confirm.Link_Desc_Rsp.Type.NUM_CoS, 0)); //TODO (not supported) } if (lgpr.LinkDescriptorsRequest[1]) { lgpc.LinkDescRspList.Add(new Link_Get_Parameters_Confirm.Link_Desc_Rsp(Link_Get_Parameters_Confirm.Link_Desc_Rsp.Type.NUM_QUEUE, 1)); //TODO (not supported) } //----------- lgpc.Status = STATUS.SUCCESS; } catch (Exception e) { lgpc.Status = STATUS.UNSPECIFIED_FAILURE; } Message toSend = ResponseBuilders.Get_Parameters_Response_Builder(dstID, srcID, m.MIHHeader.TransactionID, lgpc); if (Program.MESSAGE_DETAILS) { Console.WriteLine("Sending message: (" + m.MIHHeader.MID.AID + ")"); Connection.MIHProtocol.PacketReader.PrintMessage(toSend); } ch.Send(toSend.ByteValue); }
/// <summary> /// Prints a serialized message. /// </summary> /// <param name="m">The serialized message to print.</param> public static void PrintMessage(Message m) { Payload.TLVIterator it = m.Payload.GetTLVIterator(); Console.Write("\t("); Console.Write(new ID(new OctetString(it.Next().Value))); Console.Write(" -> " + new ID(new OctetString(it.Next().Value))); Console.Write(")"); Console.WriteLine(); switch (m.MIHHeader.MID.AID) { case AIDGlobal.COMMAND_SERVICE_MIH_LINK_ACTIONS: if (m.MIHHeader.MID.OpCode == MessageID.OperationCode.REQUEST) { //LINK ACTION REQUEST Console.WriteLine(new Link_Action_Request(MIHDeserializer.DeserializeLinkAction(it.Next()), MIHDeserializer.DeserializeTimeInterval(it.Next()), MIHDeserializer.DeserializePoA(it.Next())).ToString()); } else { //LINK ACTION RESPONSE if (it.Count == 5) { Console.WriteLine(new Link_Action_Response(MIHDeserializer.DeserializeStatus(it.Next()), MIHDeserializer.DeserializeLinkScanRspList(it.Next()), MIHDeserializer.DeserializeLinkAcResult(it.Next()))); } else { Console.WriteLine(new Link_Action_Response(MIHDeserializer.DeserializeStatus(it.Next()), new List <byte[]>(), MIHDeserializer.DeserializeLinkAcResult(it.Next()))); } } break; case AIDGlobal.EVENT_SERVICE_MIH_LINK_UP: Console.WriteLine(new Link_Up(MIHDeserializer.DeserializeLinkTupleId(it.Next()), null, null)); break; case AIDGlobal.EVENT_SERVICE_MIH_LINK_DOWN: Console.WriteLine( it.Count < 5? new Link_Down(MIHDeserializer.DeserializeLinkTupleId(it.Next()), null, MIHDeserializer.DeserializeLinkDnReason(it.Next())) : new Link_Down(MIHDeserializer.DeserializeLinkTupleId(it.Next()), MIHDeserializer.DeserializeOldAccessRouter(it.Next()), MIHDeserializer.DeserializeLinkDnReason(it.Next())) ); break; case AIDGlobal.EVENT_SERVICE_MIH_LINK_DETECTED: Console.WriteLine(new Link_Detected(MIHDeserializer.DeserializeLinkDetInfo(it.Next()))); break; case AIDGlobal.COMMAND_SERVICE_MIH_LINK_GET_PARAMETERS: if (m.MIHHeader.MID.OpCode == MessageID.OperationCode.REQUEST) { Console.WriteLine(new Link_Get_Parameters_Request(MIHDeserializer.DeserializeLinkParamRequest(it.Next()), it.Next().Value, it.Next().Value)); } else { Console.WriteLine(new Link_Get_Parameters_Confirm(MIHDeserializer.DeserializeStatus(it.Next()), MIHDeserializer.DeserializeLinkParamStatusList(it.Next()), MIHDeserializer.DeserializeLinkStatesResponse(it.Next()), MIHDeserializer.DeserializeLinkDescriptorsResponse(it.Next()))); } break; default: Console.WriteLine("N/A"); break; } }