Synchronous linear processing.
(pd *PacketData)
| 429 | |
| 430 | // Synchronous linear processing. |
| 431 | func (d *Device) PacketToMsg(pd *PacketData) (ppd *PacketParserData, err error) { |
| 432 | defer func() { |
| 433 | if x := recover(); x != nil { |
| 434 | ppd = nil |
| 435 | err = fmt.Errorf("!!!recovered from panic: %v\n%s", x, string(debug.Stack())) |
| 436 | ErrRuntimePanic.SetExtraError(err) |
| 437 | err = ErrRuntimePanic |
| 438 | } |
| 439 | }() |
| 440 | |
| 441 | var packetType int |
| 442 | packetType, _, err = d.RecvPrecheck(pd.BasePacket) |
| 443 | if err != nil { |
| 444 | return nil, err |
| 445 | } |
| 446 | // skip processing keepalive packet |
| 447 | if packetType == NHP_KPL { |
| 448 | return &PacketParserData{HeaderType: NHP_KPL}, nil |
| 449 | } |
| 450 | |
| 451 | pd.InitTime = time.Now().UnixNano() |
| 452 | ppd, err = d.createPacketParserData(pd) |
| 453 | defer ppd.Destroy() |
| 454 | if err != nil { |
| 455 | return nil, err |
| 456 | } |
| 457 | err = ppd.validatePeer() |
| 458 | if err != nil { |
| 459 | return nil, err |
| 460 | } |
| 461 | err = ppd.decryptBody() |
| 462 | if err != nil { |
| 463 | return nil, err |
| 464 | } |
| 465 | |
| 466 | return ppd, nil |
| 467 | } |
| 468 | |
| 469 | func (d *Device) SendMsgToPacket(md *MsgData) { |
| 470 | select { |
no test coverage detected