}
}
},
+ (PATRON_INFO_RESP) => {
+ name => "Patron Info Response",
+ protocol => {
+ 2 => {
+ template => "A14A3A18A4A4A4A4A4A4",
+ template_len => 59,
+ fields => [(FID_INST_ID), (FID_PATRON_ID),
+ (FID_PERSONAL_NAME), (FID_HOLD_ITEMS),
+ (FID_VALID_PATRON), (FID_VALID_PATRON_PWD),
+ (FID_CURRENCY), (FID_HOME_ADDR),
+ (FID_FEE_TYPE), (FID_FEE_AMT),
+ (FID_HOLD_ITEMS), (FID_OVERDUE_ITEMS),
+ (FID_CHARGED_ITEMS), (FID_FINE_ITEMS),
+ (FID_UNAVAILABLE_HOLD_ITEMS),(FID_RECALL_ITEMS)],
+ repeatable => [(FID_HOLD_ITEMS), (FID_OVERDUE_ITEMS),
+ (FID_CHARGED_ITEMS), (FID_FINE_ITEMS),
+ (FID_UNAVAILABLE_HOLD_ITEMS),(FID_RECALL_ITEMS)],
+ }
+ }
+ },
(END_PATRON_SESSION) => {
name => "End Patron Session",
handler => \&handle_end_patron_session,
$handlers{$i}->{protocol}->{2} = $handlers{$i}->{protocol}->{1};
}
+ for my $proto ( 1 .. 2 ) {
+ $handlers{$i}->{protocol}->{$proto2}->{repeatable} = []
+ if (!exists($handlers{$i}->{protocol}->{$proto}->{repeatable}));
+ }
+
$handlers{$i}->{handler} ||= \&stub_handler
}
"Unsupported field '%s' in %s message '%s'",
$fn, $self->{name}, $msg);
} elsif (defined($self->{fields}->{$fn})) {
- syslog("LOG_WARNING",
- "Duplicate field '%s' (previous value '%s') in %s message '%s'",
- $fn, $self->{fields}->{$fn}, $self->{name}, $msg);
+ if (grep /$fn/ @{$proto->{repeatable}}) {
+ $self->{fields}->{$fn} = [$self->{fields}->{$fn}] if (!ref($self->{fields}->{$fn}));
+ push @{ $self->{fields}->{$fn} }, substr($field, 2);
+ } else {
+ syslog("LOG_WARNING",
+ "Duplicate field '%s' (previous value '%s') in %s message '%s'",
+ $fn, $self->{fields}->{$fn}, $self->{name}, $msg);
+ }
} else {
$self->{fields}->{$fn} = substr($field, 2);
}