# -- coding: cp1251 --
#! /usr/bin/python3
import socket

switch = { '$qSupported':'PacketSize=131072;swbreak+;hwbreak+',
           '$Hg0':'OK',
           '$Hg-1':'OK',
           '$qTStatus':'',
           '$qfThreadInfo':'m0',
           '$qsThreadInfo':'l',
           '$Hc-1':'OK',
           '$qC':'',
           '$qAttached':'1',
           '$qOffsets':'Text=00;Data=00;Bss=0', 
           '$p20':'0000010000000000',
           '$qSymbol':'OK',
           '$vKill':'OK',
           '+$?':'S00',
           '$qTfV':'',
           '$qTsP':'',
           'Hc0':'OK',
           'c':'',
           '$#':'',
           '$D':'OK',
           '$!':'OK'
           }

def ReadMemory(data):
    #some code
    return value 

def ReadRegisters(data):
    #some code
    return value

def WriteRegisters(data):
    #some code
    return "Ok"

def WriteRegisterN(data):
    #some code
    return "OK"

def WriteMemory(data):
    #some code
    return "OK"

def LastSignal(data):
    return "S05"

def Step():
    #some code
    return 'S00'

def Continue():
    #some code
    return 'S05'

def SetMemory(data):
    #some code
    return "OK"

def InsertBreakpoint(data):
    #some code
    return "OK"

def DeleteBreakpoint(data):
    #some code
    return "OK"

def VQuery(data):
    if (data.find('$vCont;c') != -1):
        return 'T0501:7ffff850;40:3000ce98'    
    if (data.find('$vCont?') != -1):
        return ""
    if (data.find('$vCtrlC') != -1):
        printf("Client interrupt the process")
    if (data.find('$vKill') != -1):
        printf("Client kill the process")
    if (data.find('$vStopped') != -1):
        printf("Client stopped the process")
    if (data.find('$vMustReplyEmpty') != -1):
        return ''
    return "OK"

def Message(data):
    print('Data: ', data)
    if (data.find('$m') != -1):
        return ReadMemory(data)
    elif (data.find('$g') != -1):
        return ReadRegisters(data)
    elif (data.find('$G') != -1):
        return WriteRegisters(data)
    elif (data.find('$P') != -1):
        return WriteRegisterN(data)
    elif (data.find('$M') != -1):
        return WriteMemory(data)
    elif (data.find('$?') != -1):
        return LastSignal(data)
    elif (data.find('$s') != -1):
        return Step() 
    elif (data.find('$c') != -1):
        return Continue()
    elif (data.find('$X') != -1):
        return SetMemory(data)
    elif (data.find('$Z') != -1):
        return InsertBreakpoint(data)
    elif (data.find('$z') != -1):
        return DeleteBreakpoint(data)
    elif (data.find('$v') != -1):
        return VQuery(data)
    else:
        for key in switch:
            if (data.find(key) != -1):
                return switch[key]
    return 'OK'

###########################################################
#*********************************************************#
###########################################################
class GDBClientHandler(object):
    def __init__(self, clientsocket):
        #some code
    def run(self):
        msg=Message(data)

GDBClientHandler(conn).run()