const byte bufsiz = 32;
char buf[bufsiz];
boolean new_data = false;
boolean start = true;

void setup() {
  delay(3000);
  Serial1.begin(9600);
}

void loop() {
  if (start == true) {
    Serial1.print("Login: ");
    start = false;
  }
  recv_data();
  if (new_data == true)
    validate();
}

void recv_data() {
  static byte i = 0;
  static char last_char;
  char end1 = '\n';
  char end2 = '\r';
  char rc;

  while (Serial1.available() > 0 && new_data == false) {
    rc = Serial1.read();       
    // Pominięcie następnego znaku \r lub \n, jeżeli poprzednim był również \r lub \n.
    if ((rc == end1 || rc == end2) && (last_char == end2 || last_char == end1))
      return;
    last_char = rc;

    if (rc != end1 && rc != end2) {
      buf[i++] = rc;
      if (i >= bufsiz)
        i = bufsiz - 1;
    } else {
      buf[i] = '\0'; // Koniec ciągu znaków.
      i = 0;
      new_data = true;
    }
  } 
}

void validate() {
  Serial1.println(buf);
  new_data = false;
  if (strcmp(buf, "sock-raw.org") == 0)
    Serial1.println("Dostęp otwarty");
  else {
    Serial1.println("Dostęp zamknęty");
    Serial1.print("Login: ");
  }
}