/* SYNTAX: VER [[<jid>[/<resource>]]|[<name]] */ static void cmd_ver(const char *data, XMPP_SERVER_REC *server, WI_ITEM_REC *item) { char *cmd_dest, *dest; void *free_arg; CMD_XMPP_SERVER(server); if (!cmd_get_params(data, &free_arg, 1, &cmd_dest)) return; dest = xmpp_get_dest(cmd_dest, server, item); request_version(server, dest); g_free(dest); cmd_params_free(free_arg); }
bool LASzip::setup(U16* num_items, LASitem** items, const U8 point_type, const U16 point_size, const U16 compressor) { U32 compatible = 0; BOOL have_point14 = FALSE; BOOL have_gps_time = FALSE; BOOL have_rgb = FALSE; BOOL have_nir = FALSE; BOOL have_wavepacket = FALSE; I32 extra_bytes_number = 0; // switch over the point types we know switch (point_type) { case 0: extra_bytes_number = (I32)point_size - 20; break; case 1: have_gps_time = TRUE; extra_bytes_number = (I32)point_size - 28; break; case 2: have_rgb = TRUE; extra_bytes_number = (I32)point_size - 26; break; case 3: have_gps_time = TRUE; have_rgb = TRUE; extra_bytes_number = (I32)point_size - 34; break; case 4: have_gps_time = TRUE; have_wavepacket = TRUE; extra_bytes_number = (I32)point_size - 57; break; case 5: have_gps_time = TRUE; have_rgb = TRUE; have_wavepacket = TRUE; extra_bytes_number = (I32)point_size - 63; break; case 6: have_point14 = TRUE; extra_bytes_number = (I32)point_size - 30; break; case 7: have_point14 = TRUE; have_rgb = TRUE; extra_bytes_number = (I32)point_size - 36; break; case 8: have_point14 = TRUE; have_rgb = TRUE; have_nir = TRUE; extra_bytes_number = (I32)point_size - 38; break; case 9: have_point14 = TRUE; have_wavepacket = TRUE; extra_bytes_number = (I32)point_size - 59; break; case 10: have_point14 = TRUE; have_rgb = TRUE; have_nir = TRUE; have_wavepacket = TRUE; extra_bytes_number = (I32)point_size - 67; break; default: if (1) { char error[64]; sprintf(error, "point type %d unknown", point_type); return return_error(error); } } if (extra_bytes_number < 0) { // char error[64]; // sprintf(error, "point size %d too small for point type %d by %d bytes", point_size, point_type, -extra_bytes_number); // return return_error(error); fprintf(stderr, "WARNING: point size %d too small by %d bytes for point type %d. assuming point_size of %d\n", point_size, -extra_bytes_number, point_type, point_size-extra_bytes_number); extra_bytes_number = 0; } // maybe represent new LAS 1.4 as corresponding LAS 1.3 points plus extra bytes for compatibility if (have_point14 && (compatible != 0)) { // we need 4 extra bytes for the new point attributes extra_bytes_number += 4; // we store the GPS time separately have_gps_time = TRUE; // if we have NIR we need another 2 extra bytes if (have_nir) { extra_bytes_number += 2; } } // create item description (*num_items) = 1 + !!(have_gps_time) + !!(have_rgb) + !!(have_wavepacket) + !!(extra_bytes_number); (*items) = new LASitem[*num_items]; U16 i = 1; if (have_point14 && (compatible == 0)) { (*items)[0].type = LASitem::POINT14; (*items)[0].size = 30; (*items)[0].version = 0; } else { (*items)[0].type = LASitem::POINT10; (*items)[0].size = 20; (*items)[0].version = 0; } if (have_gps_time) { (*items)[i].type = LASitem::GPSTIME11; (*items)[i].size = 8; (*items)[i].version = 0; i++; } if (have_rgb) { if (have_nir && (compatible == 0)) { (*items)[i].type = LASitem::RGBNIR14; (*items)[i].size = 8; (*items)[i].version = 0; } else { (*items)[i].type = LASitem::RGB12; (*items)[i].size = 6; (*items)[i].version = 0; } i++; } if (have_wavepacket) { (*items)[i].type = LASitem::WAVEPACKET13; (*items)[i].size = 29; (*items)[i].version = 0; i++; } if (extra_bytes_number) { (*items)[i].type = LASitem::BYTE; (*items)[i].size = extra_bytes_number; (*items)[i].version = 0; i++; } if (compressor) request_version(2); assert(i == *num_items); return true; }