001/* 002 * jPOS Project [http://jpos.org] 003 * Copyright (C) 2000-2026 jPOS Software SRL 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 019package org.jpos.iso.packager; 020 021import org.jpos.iso.*; 022import org.jpos.util.Logger; 023 024/* 025 * $Log$ 026 * Revision 1.6 2005/12/19 22:47:50 apr 027 * Applied changes suggested by Mladen in http://groups-beta.google.com/group/jpos-users/browse_thread/thread/e60807e917c8c170/e29a681592d63a2b#e29a681592d63a2b and confirmed by Murtuza and Jeff 028 * 029 * Revision 1.5 2003/10/13 10:34:16 apr 030 * Tabs expanded to 8 spaces 031 * 032 * Revision 1.4 2003/05/16 04:15:14 alwyns 033 * Import cleanups. 034 * 035 * Revision 1.3 2001/01/13 19:26:09 victor 036 * changed bitmap size to 16 037 * 038 * Revision 1.2 2000/11/02 12:09:18 apr 039 * Added license to every source file 040 * 041 * Revision 1.1 2000/04/16 22:12:33 apr 042 * New packagers location org.jpos.iso.packager 043 * 044 * Revision 1.6 2000/03/01 14:44:45 apr 045 * Changed package name to org.jpos 046 * 047 * Revision 1.5 2000/02/28 11:11:37 apr 048 * Added inner ISOMsg logging 049 * 050 * Revision 1.4 2000/02/27 14:28:05 apr 051 * PostPackager compatible with new jPOS ISOMsgFieldPackager 052 * Support for new Postillion version [Victor] 053 * 054 * Revision 1.3 1999/09/20 12:33:03 apr 055 * Removed external PostPrivatePackager - now Victor uses ISOMsgFieldPackager 056 * with inner PostPrivatePackager 057 * 058 */ 059 060/** 061 * ISO 8583 v1987 Packager for Postilion 062 * 063 * @author Victor A. Salaman (salaman@teknos.com) 064 * @version $Id$ 065 * @see ISOPackager 066 * @see ISOBasePackager 067 * @see ISOComponent 068 */ 069 070public class PostPackager extends ISOBasePackager { 071 /** Sub-packager handling the Postilion private-use bitmap (DE-127). */ 072 protected PostPrivatePackager p127 = new PostPrivatePackager(); 073 /** Field-by-field packager array for the ISO-8583 v1987 Postilion variant. */ 074 protected ISOFieldPackager fld[] = { 075 new IFA_NUMERIC ( 4, "MESSAGE TYPE INDICATOR"), 076 new IFB_BITMAP ( 16, "BIT MAP"), 077 new IFA_LLNUM ( 19, "PAN - PRIMARY ACCOUNT NUMBER"), 078 new IFA_NUMERIC ( 6, "PROCESSING CODE"), 079 new IFA_NUMERIC ( 12, "AMOUNT, TRANSACTION"), 080 new IFA_NUMERIC ( 12, "AMOUNT, SETTLEMENT"), 081 new IFA_NUMERIC ( 12, "AMOUNT, CARDHOLDER BILLING"), 082 new IFA_NUMERIC ( 10, "TRANSMISSION DATE AND TIME"), 083 new IFA_NUMERIC ( 8, "AMOUNT, CARDHOLDER BILLING FEE"), 084 new IFA_NUMERIC ( 8, "CONVERSION RATE, SETTLEMENT"), 085 new IFA_NUMERIC ( 8, "CONVERSION RATE, CARDHOLDER BILLING"), 086 new IFA_NUMERIC ( 6, "SYSTEM TRACE AUDIT NUMBER"), 087 new IFA_NUMERIC ( 6, "TIME, LOCAL TRANSACTION"), 088 new IFA_NUMERIC ( 4, "DATE, LOCAL TRANSACTION"), 089 new IFA_NUMERIC ( 4, "DATE, EXPIRATION"), 090 new IFA_NUMERIC ( 4, "DATE, SETTLEMENT"), 091 new IFA_NUMERIC ( 4, "DATE, CONVERSION"), 092 new IFA_NUMERIC ( 4, "DATE, CAPTURE"), 093 new IFA_NUMERIC ( 4, "MERCHANTS TYPE"), 094 new IFA_NUMERIC ( 3, "ACQUIRING INSTITUTION COUNTRY CODE"), 095 new IFA_NUMERIC ( 3, "PAN EXTENDED COUNTRY CODE"), 096 new IFA_NUMERIC ( 3, "FORWARDING INSTITUTION COUNTRY CODE"), 097 new IFA_NUMERIC ( 3, "POINT OF SERVICE ENTRY MODE"), 098 new IFA_NUMERIC ( 3, "CARD SEQUENCE NUMBER"), 099 new IFA_NUMERIC ( 3, "NETWORK INTERNATIONAL IDENTIFIEER"), 100 new IFA_NUMERIC ( 2, "POINT OF SERVICE CONDITION CODE"), 101 new IFA_NUMERIC ( 2, "POINT OF SERVICE PIN CAPTURE CODE"), 102 new IFA_NUMERIC ( 1, "AUTHORIZATION IDENTIFICATION RESP LEN"), 103 new IFA_AMOUNT ( 9, "AMOUNT, TRANSACTION FEE"), 104 new IFA_AMOUNT ( 9, "AMOUNT, SETTLEMENT FEE"), 105 new IFA_AMOUNT ( 9, "AMOUNT, TRANSACTION PROCESSING FEE"), 106 new IFA_AMOUNT ( 9, "AMOUNT, SETTLEMENT PROCESSING FEE"), 107 new IFA_LLNUM ( 11, "ACQUIRING INSTITUTION IDENT CODE"), 108 new IFA_LLNUM ( 11, "FORWARDING INSTITUTION IDENT CODE"), 109 new IFA_LLCHAR ( 28, "PAN EXTENDED"), 110 new IFA_LLNUM ( 37, "TRACK 2 DATA"), 111 new IFA_LLLCHAR (104, "TRACK 3 DATA"), 112 new IF_CHAR ( 12, "RETRIEVAL REFERENCE NUMBER"), 113 new IF_CHAR ( 6, "AUTHORIZATION IDENTIFICATION RESPONSE"), 114 new IF_CHAR ( 2, "RESPONSE CODE"), 115 new IF_CHAR ( 3, "SERVICE RESTRICTION CODE"), 116 new IF_CHAR ( 8, "CARD ACCEPTOR TERMINAL IDENTIFICACION"), 117 new IF_CHAR ( 15, "CARD ACCEPTOR IDENTIFICATION CODE" ), 118 new IF_CHAR ( 40, "CARD ACCEPTOR NAME/LOCATION"), 119 new IFA_LLCHAR ( 25, "ADITIONAL RESPONSE DATA"), 120 new IFA_LLCHAR ( 76, "TRACK 1 DATA"), 121 new IFA_LLLCHAR (999, "ADITIONAL DATA - ISO"), 122 new IFA_LLLCHAR (999, "ADITIONAL DATA - NATIONAL"), 123 new IFA_LLLCHAR (999, "ADITIONAL DATA - PRIVATE"), 124 new IF_CHAR ( 3, "CURRENCY CODE, TRANSACTION"), 125 new IF_CHAR ( 3, "CURRENCY CODE, SETTLEMENT"), 126 new IF_CHAR ( 3, "CURRENCY CODE, CARDHOLDER BILLING" ), 127 new IFB_BINARY ( 8, "PIN DATA" ), 128 new IFB_BINARY ( 48, "SECURITY RELATED CONTROL INFORMATION"), 129 new IFA_LLLCHAR (120, "ADDITIONAL AMOUNTS"), 130 new IFA_LLLCHAR (999, "RESERVED ISO"), 131 new IFA_LLLCHAR (999, "RESERVED ISO"), 132 new IFA_LLLCHAR (999, "RESERVED NATIONAL"), 133 new IFA_LLLCHAR (999, "RESERVED NATIONAL"), 134 new IFA_LLLCHAR (999, "RESERVED NATIONAL"), 135 new IFA_LLLCHAR (999, "RESERVED PRIVATE"), 136 new IFA_LLLCHAR (999, "RESERVED PRIVATE"), 137 new IFA_LLLCHAR (999, "RESERVED PRIVATE"), 138 new IFA_LLLCHAR (999, "RESERVED PRIVATE"), 139 new IFA_BINARY ( 8, "MESSAGE AUTHENTICATION CODE FIELD"), 140 new IFA_BINARY ( 8, "BITMAP, EXTENDED"), 141 new IFA_NUMERIC ( 1, "SETTLEMENT CODE"), 142 new IFA_NUMERIC ( 2, "EXTENDED PAYMENT CODE"), 143 new IFA_NUMERIC ( 3, "RECEIVING INSTITUTION COUNTRY CODE"), 144 new IFA_NUMERIC ( 3, "SETTLEMENT INSTITUTION COUNTRY CODE"), 145 new IFA_NUMERIC ( 3, "NETWORK MANAGEMENT INFORMATION CODE"), 146 new IFA_NUMERIC ( 4, "MESSAGE NUMBER"), 147 new IFA_NUMERIC ( 4, "MESSAGE NUMBER LAST"), 148 new IFA_NUMERIC ( 6, "DATE ACTION"), 149 new IFA_NUMERIC ( 10, "CREDITS NUMBER"), 150 new IFA_NUMERIC ( 10, "CREDITS REVERSAL NUMBER"), 151 new IFA_NUMERIC ( 10, "DEBITS NUMBER"), 152 new IFA_NUMERIC ( 10, "DEBITS REVERSAL NUMBER"), 153 new IFA_NUMERIC ( 10, "TRANSFER NUMBER"), 154 new IFA_NUMERIC ( 10, "TRANSFER REVERSAL NUMBER"), 155 new IFA_NUMERIC ( 10, "INQUIRIES NUMBER"), 156 new IFA_NUMERIC ( 10, "AUTHORIZATION NUMBER"), 157 new IFA_NUMERIC ( 12, "CREDITS, PROCESSING FEE AMOUNT"), 158 new IFA_NUMERIC ( 12, "CREDITS, TRANSACTION FEE AMOUNT"), 159 new IFA_NUMERIC ( 12, "DEBITS, PROCESSING FEE AMOUNT"), 160 new IFA_NUMERIC ( 12, "DEBITS, TRANSACTION FEE AMOUNT"), 161 new IFA_NUMERIC ( 16, "CREDITS, AMOUNT"), 162 new IFA_NUMERIC ( 16, "CREDITS, REVERSAL AMOUNT"), 163 new IFA_NUMERIC ( 16, "DEBITS, AMOUNT"), 164 new IFA_NUMERIC ( 16, "DEBITS, REVERSAL AMOUNT"), 165 new IFA_NUMERIC ( 42, "ORIGINAL DATA ELEMENTS"), 166 new IF_CHAR ( 1, "FILE UPDATE CODE"), 167 new IF_CHAR ( 2, "FILE SECURITY CODE"), 168 new IF_CHAR ( 5, "RESPONSE INDICATOR"), 169 new IF_CHAR ( 7, "SERVICE INDICATOR"), 170 new IF_CHAR ( 42, "REPLACEMENT AMOUNTS"), 171 new IFA_BINARY ( 8, "MESSAGE SECURITY CODE"), 172 new IFA_AMOUNT ( 17, "AMOUNT, NET SETTLEMENT"), 173 new IF_CHAR ( 25, "PAYEE"), 174 new IFA_LLNUM ( 11, "SETTLEMENT INSTITUTION IDENT CODE"), 175 new IFA_LLNUM ( 11, "RECEIVING INSTITUTION IDENT CODE"), 176 new IFA_LLCHAR ( 17, "FILE NAME"), 177 new IFA_LLCHAR ( 28, "ACCOUNT IDENTIFICATION 1"), 178 new IFA_LLCHAR ( 28, "ACCOUNT IDENTIFICATION 2"), 179 new IFA_LLLCHAR (100, "TRANSACTION DESCRIPTION"), 180 new IFA_LLLCHAR (999, "RESERVED ISO USE"), 181 new IFA_LLLCHAR (999, "RESERVED ISO USE"), 182 new IFA_LLLCHAR (999, "RESERVED ISO USE"), 183 new IFA_LLLCHAR (999, "RESERVED ISO USE"), 184 new IFA_LLLCHAR (999, "RESERVED ISO USE"), 185 new IFA_LLLCHAR (999, "RESERVED ISO USE"), 186 new IFA_LLLCHAR (999, "RESERVED ISO USE"), 187 new IFA_LLLCHAR (999, "RESERVED NATIONAL USE"), 188 new IFA_LLLCHAR (999, "RESERVED NATIONAL USE"), 189 new IFA_LLLCHAR (999, "RESERVED NATIONAL USE" ), 190 new IFA_LLLCHAR (999, "RESERVED NATIONAL USE"), 191 new IFA_LLLCHAR (999, "RESERVED NATIONAL USE" ), 192 new IFA_LLLCHAR (999, "RESERVED NATIONAL USE"), 193 new IFA_LLLCHAR (999, "RESERVED NATIONAL USE"), 194 new IFA_LLLCHAR (999, "RESERVED NATIONAL USE"), 195 new IFA_LLLCHAR (999, "RESERVED PRIVATE USE"), 196 new IFA_LLLCHAR (999, "RESERVED PRIVATE USE"), 197 new IFA_LLLCHAR (999, "RESERVED PRIVATE USE"), 198 new IFA_LLLCHAR (999, "RESERVED PRIVATE USE"), 199 new IFA_LLLCHAR (999, "RESERVED PRIVATE USE"), 200 new IFA_LLLCHAR (999, "RESERVED PRIVATE USE"), 201 new IFA_LLLCHAR (999, "RESERVED PRIVATE USE"), 202 new ISOMsgFieldPackager( 203 new IFA_LLLLLLBINARY (99999, "RESERVED PRIVATE USE"), 204 p127 205 ), 206 new IFA_LLLCHAR (999, "MAC 2") 207 }; 208 /** Inner packager handling Postilion's private-use sub-fields nested under DE-127. */ 209 protected static class PostPrivatePackager extends ISOBasePackager 210 { 211 /** Field-by-field packager array for the DE-127 sub-message. */ 212 protected ISOFieldPackager fld127[] = 213 { 214 new IF_CHAR (0, "PLACEHOLDER"), 215 new IFB_BITMAP (8, "BITMAP"), 216 new IFA_LLCHAR (32, "SWITCH KEY"), 217 new IF_CHAR (48, "ROUTING INFORMATION"), 218 new IF_CHAR (22, "POS DATA"), 219 new IF_CHAR (73, "SERVICE STATION DATA"), 220 new IFA_NUMERIC (2, "AUTHORIZATION PROFILE"), 221 new IFA_LLCHAR (50, "CHECK DATA"), 222 new IFA_LLLCHAR (128, "RETENTION DATA"), 223 new IFA_LLLCHAR (255, "ADDITIONAL NODE DATA"), 224 new IFA_NUMERIC (3, "CVV2"), 225 new IFA_LLCHAR (32, "ORIGINAL KEY"), 226 new IFA_LLCHAR (25, "TERMINAL OWNDER"), 227 new IF_CHAR (17, "POS GEOGRAPHIC DATA"), 228 new IF_CHAR (8, "SPONSOR BANK"), 229 new IFA_LLCHAR (29, "AVS REQUEST"), 230 new IF_CHAR (1, "AVS RESPONSE"), 231 new IFA_LLCHAR (50, "CARDHOLDER INFORMATION"), 232 new IFA_LLCHAR (50, "VALIDATION DATA"), 233 new IF_CHAR (45, "BANK DETAILS"), 234 new IFA_NUMERIC (8, "AUTHORIZER DATE SETTLEMENT"), 235 new IFA_LLCHAR (12, "RECORD IDENTIFICATION"), 236 new IFA_LLLLLCHAR (99999, "STRUCTURED DATA"), 237 new IF_CHAR (253, "PAYEE NAME AND ADDRESS"), 238 new IFA_LLCHAR (28, "PAYER ACCOUNT INFORMATION"), 239 new IFA_LLLLCHAR(8000, "ICC DATA") 240 }; 241 242 /** Default constructor. Configures the inner field-packager array. */ 243 protected PostPrivatePackager() 244 { super(); 245 setFieldPackager(fld127); 246 } 247 } 248 /** Default constructor. */ 249 public PostPackager() { 250 super(); 251 setFieldPackager(fld); 252 } 253 /** 254 * Forwards the logger configuration to the nested DE-127 sub-packager so 255 * its diagnostics share the parent realm namespace. 256 * 257 * @param logger logger to bind 258 * @param realm logger realm 259 */ 260 public void setLogger (Logger logger, String realm) { 261 super.setLogger (logger, realm); 262 p127.setLogger (logger, realm + ".PostPrivatePackager"); 263 } 264}