Commit f7a845f9 by Owo Sugiana

Bug fixed streamer pos

1 parent ac93356a
0.1.7 2020-09-24
----------------
- Bug fixed streamer pos (untuk PT POS) terkait Python 3
0.1.6 2020-06-24 0.1.6 2020-06-24
---------------- ----------------
- Perubahan rumus StanGenerator - Perubahan rumus StanGenerator
......
...@@ -15,13 +15,17 @@ class BaseISO8583(ISO8583): ...@@ -15,13 +15,17 @@ class BaseISO8583(ISO8583):
value = "%s" % value value = "%s" % value
if len(value) > self.getBitLimit(bit): if len(value) > self.getBitLimit(bit):
value = value[0:self.getBitLimit(bit)] value = value[0:self.getBitLimit(bit)]
raise ValueTooLarge('Error: value up to size! Bit[%s] of type %s limit size = %s' % ( raise ValueTooLarge(
bit, self.getBitType(bit), self.getBitLimit(bit))) 'Error: value up to size! Bit[%s] of type %s '
'limit size = %s' % (
bit, self.getBitType(bit), self.getBitLimit(bit)))
data_form = self.getBitFormat(bit) data_form = self.getBitFormat(bit)
if data_form == "A": if data_form == "A":
self.BITMAP_VALUES[bit] = value.ljust(self.getBitLimit(bit)).encode() self.BITMAP_VALUES[bit] = value.ljust(self.getBitLimit(bit)).\
encode()
elif data_form == "E": elif data_form == "E":
self.BITMAP_VALUES[bit] = value.zfill(self.getBitLimit(bit)).encode('cp1148') self.BITMAP_VALUES[bit] = value.zfill(self.getBitLimit(bit)).\
encode('cp1148')
def redefineBit(self, bit, short_name, long_name, type_, size, valueType): def redefineBit(self, bit, short_name, long_name, type_, size, valueType):
if type_ in ('LL', 'LLL'): if type_ in ('LL', 'LLL'):
...@@ -33,15 +37,6 @@ class BaseISO8583(ISO8583): ...@@ -33,15 +37,6 @@ class BaseISO8583(ISO8583):
self, bit, short_name, long_name, type_, LenForm, size, self, bit, short_name, long_name, type_, LenForm, size,
valueType, format_) valueType, format_)
#def getRawIso(self):
# raw = ISO8583.getRawIso(self)
# if isinstance(raw, bytes):
# raw = raw.decode('utf-8')
# return raw.upper()
#def setIsoContent(self, raw):
# ISO8583.setIsoContent(self, raw.encode('utf-8'))
def get_bit_definition(self): def get_bit_definition(self):
return {} return {}
......
...@@ -89,7 +89,7 @@ class Doc(BaseISO8583): ...@@ -89,7 +89,7 @@ class Doc(BaseISO8583):
def get_name(self): def get_name(self):
return self.is_echo() or self.is_sign_on() or self.is_sign_off() or \ return self.is_echo() or self.is_sign_on() or self.is_sign_off() or \
self.is_reversal() or self.is_inquiry() or self.is_payment() self.is_reversal() or self.is_inquiry() or self.is_payment()
def get_transaction_code(self): def get_transaction_code(self):
return self.getBit(3) return self.getBit(3)
...@@ -131,13 +131,11 @@ class Doc(BaseISO8583): ...@@ -131,13 +131,11 @@ class Doc(BaseISO8583):
# Override, please # Override, please
def copy_inquiry_bits(self): def copy_inquiry_bits(self):
#self.copy([2, 3, 11])
pass pass
# Override, please # Override, please
def copy_payment_bits(self): def copy_payment_bits(self):
self.copy_inquiry_bits() self.copy_inquiry_bits()
#self.copy([4, 48]) # amount, NTB
def set_transaction_request(self): def set_transaction_request(self):
self.setMTI('0200') self.setMTI('0200')
...@@ -148,8 +146,8 @@ class Doc(BaseISO8583): ...@@ -148,8 +146,8 @@ class Doc(BaseISO8583):
def set_inquiry_request(self): # sebagai bank def set_inquiry_request(self): # sebagai bank
self.set_transaction_request() self.set_transaction_request()
self.set_transaction_code(self.get_inquiry_code()) self.set_transaction_code(self.get_inquiry_code())
def set_inquiry_response(self): # sebagai pemda def set_inquiry_response(self): # sebagai pemda
self.set_transaction_response() self.set_transaction_response()
self.copy_inquiry_bits() self.copy_inquiry_bits()
...@@ -158,7 +156,7 @@ class Doc(BaseISO8583): ...@@ -158,7 +156,7 @@ class Doc(BaseISO8583):
def get_amount(self): def get_amount(self):
return int(self.getBit(4)) return int(self.getBit(4))
def set_payment_request(self): # sebagai bank def set_payment_request(self): # sebagai bank
self.set_transaction_request() self.set_transaction_request()
self.setBit(3, self.get_payment_code()) self.setBit(3, self.get_payment_code())
...@@ -166,7 +164,7 @@ class Doc(BaseISO8583): ...@@ -166,7 +164,7 @@ class Doc(BaseISO8583):
def set_payment_response(self): # sebagai pemda def set_payment_response(self): # sebagai pemda
self.set_transaction_response() self.set_transaction_response()
self.copy_payment_bits() self.copy_payment_bits()
def set_reversal_request(self): # sebagai bank def set_reversal_request(self): # sebagai bank
self.setMTI('0400') self.setMTI('0400')
self.setBit(3, self.get_payment_code()) self.setBit(3, self.get_payment_code())
...@@ -280,7 +278,7 @@ class Doc(BaseISO8583): ...@@ -280,7 +278,7 @@ class Doc(BaseISO8583):
self.set_network_response() self.set_network_response()
self.ack() self.ack()
def sign_on_done(self): # Sebagai bank def sign_on_done(self): # Sebagai bank
pass pass
##################### #####################
...@@ -337,7 +335,7 @@ class Doc(BaseISO8583): ...@@ -337,7 +335,7 @@ class Doc(BaseISO8583):
############### ###############
# Transaction # # Transaction #
############### ###############
def inquiry_response(self): # Sebagai pemda def inquiry_response(self): # Sebagai pemda
pass pass
def inquiry_done(self): # Sebagai bank def inquiry_done(self): # Sebagai bank
......
...@@ -7,8 +7,8 @@ from . import Doc ...@@ -7,8 +7,8 @@ from . import Doc
class Job: class Job:
def __init__(self, connection): def __init__(self, connection):
self.connection = connection self.connection = connection
self.conf = connection.conf self.conf = connection.conf
self.echo_time = None self.echo_time = None
self.sign_on_time = False self.sign_on_time = False
self.do_echo = self.is_need_echo() self.do_echo = self.is_need_echo()
...@@ -34,12 +34,12 @@ class Job: ...@@ -34,12 +34,12 @@ class Job:
return self.echo_request() return self.echo_request()
# Dipanggil Parser.run() # Dipanggil Parser.run()
def raw_to_iso(self, raw): def raw_to_iso(self, raw):
iso = self.create_iso() iso = self.create_iso()
iso.setIsoContent(raw) iso.setIsoContent(raw)
return iso return iso
# Dipanggil Connection.process() # Dipanggil Connection.process()
def process(self, from_iso): def process(self, from_iso):
if from_iso.is_response(): if from_iso.is_response():
if self.sign_on_time: if self.sign_on_time:
...@@ -50,7 +50,7 @@ class Job: ...@@ -50,7 +50,7 @@ class Job:
iso = self.create_iso(from_iso=from_iso) iso = self.create_iso(from_iso=from_iso)
try: try:
iso.process() iso.process()
except: except Exception:
with StringIO() as f: with StringIO() as f:
traceback.print_exc(file=f) traceback.print_exc(file=f)
iso.ack_other(f.getvalue()) iso.ack_other(f.getvalue())
......
from . import Streamer as BaseStreamer from .mitracomm import Streamer as BaseStreamer
# 2 byte pertama size
# Dalam 1 request bisa saja ada 2 transaksi, bahkan
# bisa saja string transaksi yang belum lengkap
class Streamer(BaseStreamer): class Streamer(BaseStreamer):
def get_size(self, raw): def get_size(self, raw): # Override
a, b = raw a, b = raw
a = ord(a) b = b * 256
b = ord(b) * 256 return b + a
return a + b
# Override Stremer.get
def get(self, raw):
if self.size:
size = self.size - len(self.raw)
else:
raw = self.raw + raw
if len(raw) < 2:
self.raw = raw
return
size = self.size = self.get_size(raw[:2])
self.raw = b''
raw = raw[2:]
self.raw += raw[:size]
if len(self.raw) == self.size:
raw_iso = self.raw
self.size = 0
self.raw = raw[size:] # Sisa
return raw_iso
self.raw += raw[size:]
# Override Stremer.set def set(self, raw): # Override
def set(self, raw):
size = len(raw) size = len(raw)
a = size % 256 b = size % 256
b = size / 256 a = int(size / 256)
header = bytes([a]) + bytes([b]) header = bytes([b]) + bytes([a])
return header + raw return header + raw
...@@ -14,7 +14,7 @@ def join_ip_port(ip, port): ...@@ -14,7 +14,7 @@ def join_ip_port(ip, port):
class Connection: class Connection:
def __init__(self, conf=None): def __init__(self, conf=None):
self.conf = conf self.conf = conf
self.connected_time = None self.connected_time = None
self.running = False self.running = False
self.created_time = time() self.created_time = time()
...@@ -137,8 +137,7 @@ class Connection: ...@@ -137,8 +137,7 @@ class Connection:
class ConnectionManager: class ConnectionManager:
def __init__(self): def __init__(self):
# Kumpulan class Connection self.conns = [] # Kumpulan class Connection
self.conns = []
def count(self, ip_port): def count(self, ip_port):
count = 0 count = 0
...@@ -161,7 +160,7 @@ class ConnectionManager: ...@@ -161,7 +160,7 @@ class ConnectionManager:
for this_ip_port, conn in self.conns: for this_ip_port, conn in self.conns:
index += 1 index += 1
if this_ip_port == ip_port: if this_ip_port == ip_port:
found_conn = conn found_conn = conn
found_index = index found_index = index
return found_conn, found_index return found_conn, found_index
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!