Mercurial > hg > freeDiameter
view contrib/app_acct_tools/purge_to_file.php @ 1510:a2fb51309cd2
Add 3GPP TS 29.345 V15.1.0 (2019-09)
Add AVPs:
- App-Layer-User-Id, UTF8String, code 3801, section 6.3.2
- Assistance-info, Grouped, code 3802, section 6.3.3
- Assistance-Info-Validity-Timer, Unsigned32, code 3803, section 6.3.4
- Discovery-Type, Unsigned32, code 3804, section 6.3.5
- Filter-Id, OctetString, code 3805, section 6.3.9
- MAC-Address, UTF8String, code 3806, section 6.3.11
- Match-Report, Grouped, code 3807, section 6.3.12
- Operating-Channel, Unsigned32, code 3808, section 6.3.14
- P2P-Features, Unsigned32, code 3809, section 6.3.15
- ProSe-App-Code, OctetString, code 3810, section 6.3.16
- ProSe-App-Id, UTF8String, code 3811, section 6.3.17
- ProSe-App-Mask, OctetString, code 3812, section 6.3.18
- ProSe-Discovery-Filter, Grouped, code 3813, section 6.3.20
- PRR-Flags, Unsigned32, code 3814, section 6.3.21
- ProSe-Validity-Timer, Unsigned32, code 3815, section 6.3.22
- Requesting-EPUID, UTF8String, code 3816, section 6.3.23
- Targeted-EPUID, UTF8String, code 3817, section 6.3.26
- Time-Window, Unsigned32, code 3818, section 6.3.27
- WiFi-P2P-Assistance-Info, Grouped, code 3819, section 6.3.30
- WLAN-Assistance-Info, Grouped, code 3820, section 6.3.31
- WLAN-Link-Layer-Id, OctetString, code 3821, section 6.3.32
- WLAN-Link-Layer-Id-List, Grouped, code 3822, section 6.3.33
- Location-Update-Trigger, Grouped, code 3823, section 6.3.42
- Location-Update-Event-Type, Unsigned32, code 3824, section 6.3.43
- Change-Of-Area-Type, Grouped, code 3825, section 6.3.44
- Location-Update-Event-Trigger, Unsigned32, code 3826, section 6.3.45
- Report-Cardinality, Enumerated, code 3827, section 6.3.46
- Minimum-Interval-Time, Unsigned32, code 3828, section 6.3.47
- Periodic-Location-Type, Grouped, code 3829, section 6.3.48
- Location-Report-Interval-Time, Unsigned32, code 3830, section 6.3.49
- Total-Number-Of-Reports, Unsigned32, code 3831, section 6.3.50
- Validity-Time-Announce, Unsigned32, code 3832, section 6.3.36
- Validity-Time-Monitor, Unsigned32, code 3833, section 6.3.37
- Validity-Time-Communication, Unsigned32, code 3834, section 6.3.38
- ProSe-App-Code-Info, Grouped, code 3835, section 6.3.39
- MIC, OctetString, code 3836, section 6.3.40
- UTC-based-Counter, Unsigned32, code 3837, section 6.3.41
- ProSe-Match-Refresh-Timer, Unsigned32, code 3838, section 6.3.52
- ProSe-Metadata-Index-Mask, OctetString, code 3839, section 6.3.60
- App-Identifier, Grouped, code 3840, section 6.3.61
- OS-ID, OctetString, code 3841, section 6.3.62
- OS-App-ID, UTF8String, code 3842, section 6.3.63
- Requesting-RPAUID, UTF8String, code 3843, section 6.3.64
- Target-RPAUID, UTF8String, code 3844, section 6.3.65
- Target-PDUID, OctetString, code 3845, section 6.3.66
- ProSe-Restricted-Code, OctetString, code 3846, section 6.3.67
- ProSe-Restricted-Code-Suffix-Range, OctetString, code 3847, section 6.3.68
- Beginning-Suffix, OctetString, code 3848, section 6.3.69
- Ending-Suffix, OctetString, code 3849, section 6.3.70
- Discovery-Entry-ID, Unsigned32, code 3850, section 6.3.59
- Match-Timestamp, Time, code 3851, section 6.3.71
- PMR-Flags, Unsigned32, code 3852, section 6.3.57
- ProSe-Application-Metadata, UTF8String, code 3853, section 6.3.58
- Discovery-Auth-Request, Grouped, code 3854, section 6.3.53
- Discovery-Auth-Response, Grouped, code 3855, section 6.3.54
- Match-Request, Grouped, code 3856, section 6.3.55
- Match-Report-Info, Grouped, code 3857, section 6.3.56
- Banned-RPAUID, UTF8String, code 3858, section 6.3.73
- Banned-PDUID, OctetString, code 3859, section 6.3.74
- Code-Receiving-Security-Material, Grouped, code 3860, section 6.3.75
- Code-Sending-Security-Material, Grouped, code 3861, section 6.3.76
- DUSK, OctetString, code 3862, section 6.3.77
- DUIK, OctetString, code 3863, section 6.3.78
- DUCK, OctetString, code 3864, section 6.3.79
- MIC-Check-indicator, Unsigned32, code 3865, section 6.3.80
- Encrypted-Bitmask, OctetString, code 3866, section 6.3.81
- ProSe-App-Code-Suffix-Range, OctetString, code 3867, section 6.3.82
- PC5-tech, OctetString, code 3868, section 6.3.84
Note: Name conflict with 3GPP TS 29.154 Time-Window (4204).
Time-Window (3818) in 3GPP TS 29.345 V12.1.0 (2014-12) predates
Time-Window (4204) in 3GPP TS 29.154 V13.1.0 (2016-03).
author | Luke Mewburn <luke@mewburn.net> |
---|---|
date | Sun, 05 Apr 2020 08:27:37 +1000 |
parents | 4cdf146f11d5 |
children |
line wrap: on
line source
<?php # This file may be called either from CLI or web PHP installation. # The copyright is the same as the freeDiameter project. Licence is BSD. /*-------------------------------------------------------*/ /* -- These parameters must match the app_acct.conf file -- */ /* The Connection String used to access the database. Example: "host=localhost dbname=app_acct user=freediameter password=foo" */ $CONNSTR=""; /* The name of the table were the records are saved by app_acct.fdx */ $TABLE="incoming"; /* -- These parameters are specific to this script -- */ /* Name of the dump file to create. It can be relative or absolute. The script fails if this file already exists. Use for example "data-".date("Ymdhis").".sql" to avoid collisions. */ $DUMPFILE="incoming_data.sql"; /* Does the script also echoes an HTML TABLE of the data processed? */ $DISPLAY_HTML=FALSE; // it would be better to detect if we are called through Web or CLI... /* In addition, issue a full HTML page (including headers) ? */ $HTML_HEADERS=TRUE; /*-------------------------------------------------------*/ /* Connect to the database */ $dbconn = pg_connect($CONNSTR) or die('Could not connect: ' . pg_last_error() . "\n"); /* Check if the file exists */ $file = fopen($DUMPFILE, "xb") or die("The file '$DUMPFILE' already exists or cannot be created, aborting.\n"); /* First, query the table format */ $format_sql = "SELECT ". " a.attname AS field,". " t.typname AS type,". /* " a.attlen AS length,". */ " a.atttypmod AS lengthvar,". " a.attnotnull AS notnull". " FROM". " pg_class c,". " pg_attribute a,". " pg_type t". " WHERE". " c.relname = '" . $TABLE . "'". " AND a.attnum > 0". " AND a.attrelid = c.oid". " AND a.atttypid = t.oid". " ORDER BY a.attnum"; $result = pg_query($dbconn, $format_sql) or die('Query failed: ' . pg_last_error() . "\n"); /* app_acct.fdx only uses a few different fields types: */ $conv_types = array( "timestamptz" => "timestamp with time zone", /* recorded on */ "bytea" => "bytea", /* octet string */ "int4" => "integer", /* unsigned32, integer32, float32 */ "int8" => "bigint" /* unsigned64, integer64, float64 */ ); $fields_types=array(); fwrite($file, " -- Data purged on ".date(DATE_RFC822)."\n\n"); fwrite($file, " -- Format of the table it was extracted from:\n"); fwrite($file, " -- CREATE TABLE \"".$TABLE."\" (\n"); $i = 0; while ($field = pg_fetch_array($result, null, PGSQL_ASSOC)) { if ($i++) fwrite($file, ",\n"); fwrite($file, " -- \"".$field["field"]."\" "); if (array_key_exists($field["type"], $conv_types)) $fields_types[$field["field"]] = $conv_types[$field["type"]]; else $fields_types[$field["field"]] = $field["type"]; fwrite($file, $fields_types[$field["field"]]); if ($field["lengthvar"] != "-1") fwrite($file, "(".$field["lengthvar"].")"); if ($field["notnull"] == "t") fwrite($file, " NOT NULL"); } fwrite($file, "\n -- );\n\n"); pg_free_result($result); /* Now, the data */ $result = pg_query($dbconn, "SELECT * FROM \"".$TABLE."\"") or die('Query failed: ' . pg_last_error() . "\n"); if (pg_num_rows($result) > 0) { fwrite($file, "INSERT INTO \"".$TABLE."\"\n (\n"); $i = pg_num_fields($result); if ($DISPLAY_HTML && $HTML_HEADERS) echo "<HTML>\n<HEAD><TITLE>Purge</TITLE></HEAD>\n<BODY>\n"; if ($DISPLAY_HTML) echo "<TABLE>\n <TR>\n"; for ($j = 0; $j < $i; $j++) { fwrite($file, ($j ? ", " : "") . "\"" . pg_escape_string(pg_field_name($result, $j)). "\""); if ($DISPLAY_HTML) echo " <TD>".htmlentities(pg_field_name($result, $j))."</TD>\n"; } fwrite($file, "\n )\n VALUES \n"); if ($DISPLAY_HTML) echo " </TR>\n"; $i = 0; while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) { if ($i++) fwrite($file, ",\n"); fwrite($file, " ( "); if ($DISPLAY_HTML) echo " <TR>\n"; $j = 0; $sql = ""; foreach ($line as $f => $v) { if (!is_null($v)) switch ($fields_types[$f]) { case "bytea": $v = "E'".pg_escape_bytea(pg_unescape_bytea($v))."'"; break; case "timestamp with time zone": $v = "E'".pg_escape_string($v)."'"; break; } else $v = "NULL"; if ($DISPLAY_HTML) echo " <TD>".htmlentities(print_r($line[$f], TRUE))."</TD>\n"; fwrite($file, ($j ? ", " : "") . $v); $sql .= ($j ? " AND " : "") . "\"".pg_escape_string($f)."\" "; if (is_null($line[$f])) $sql .= " IS NULL"; else $sql .= " = " . $v; $j++; } fwrite($file, ")"); if ($DISPLAY_HTML) echo " </TR>\n"; $res = pg_query( "DELETE FROM \"".$TABLE."\" WHERE ".$sql) or die('DELETE query failed: ' . pg_last_error() . "\n"); pg_free_result($res); } fwrite($file, "\n;\n"); if ($DISPLAY_HTML) echo "</TABLE>\n"; if ($DISPLAY_HTML && $HTML_HEADERS) echo "</BODY>\n</HTML>\n"; else echo $i." records have been successfully written to '".$DUMPFILE."' and removed from database.\n"; } else { if ($DISPLAY_HTML) echo "<p><em>No new record in the database</em></p>\n"; else echo "No new record in the database, the generated file is empty.\n"; } pg_free_result($result); /* Closing connection */ pg_close($dbconn); /* Closing the file */ fclose($file); ?>