@Override
	public void run() {
		try {
			String temp = mInput.readLine().toUpperCase();
			boolean everythingOK = true;

			if (temp.startsWith("GET")) {
				// isolate mInput field between slash and space
				int start = temp.indexOf('/') + 1;
				int end = temp.indexOf(' ', start);
				String field = temp.substring(start, end);
				GPSPacket packet = null;

				try {
					packet = new GPSPacket(mCipher.doFinal(HexUtil
							.getBytes(field)));

				} catch (IllegalBlockSizeException | BadPaddingException ex) {
					everythingOK = false;
				}
				if (packet != null) {
					// System.out.println("Packet in: " + packet);
					Vehicle.updateVehicle(packet.getID(), packet.getLat(),
							packet.getLon());
				}

			} else {
				everythingOK = false;
			}

			if (everythingOK) // it's good! acknowledge!
			{
				mOutput.writeBytes(constructHttpHeader(200, 5));
				mOutput.writeBytes(Config.getInstance().getOption(
						Config.PACKET_OK));
			} else {
				mOutput.writeBytes(constructHttpHeader(404, 0));
				mOutput.writeBytes(Config.getInstance().getOption(
						Config.PACKET_BAD));
			}
			mOutput.close();
		} catch (IOException ex) {
			// Logger.getLogger(HTTPInput.class.getName()).log(Level.SEVERE,
			// null, ex);
		}

		synchronized (sRecycleBin) {
			sRecycleBin.push(this);
		}
	}